출처: http://www.jopenbusiness.com/tc/oss/ (오픈소스 비즈니스 컨설팅)
안드로이드 앱을 개발할 때, 가장 복잡하고 까다로운 것은 화면의 회전에 따른 데이터 처리일 것이다. 모바일 앱을 개발하면서 조금씩 정리해 둔 것을 풀어 본다.
*** 참고 문헌 ***
안드로이드 앱을 개발할 때, 가장 복잡하고 까다로운 것은 화면의 회전에 따른 데이터 처리일 것이다. 모바일 앱을 개발하면서 조금씩 정리해 둔 것을 풀어 본다.
화면 회전
- Resource에서 화면(layout) 정의
- 세로 화면 : /res/layout-port/~.xml
- 가로 화면 : /res/layout-land/~.xml
- 회전 상태 확인
- Android 2.1
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); //--- orientation : 0. 세로, 1. 가로 int orientation = display.getOrientation();
- Android 2.2
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); //--- Surface.ROTATION_0 : 세로 //--- Surface.ROTATION_90 : 가로 //--- Surface.ROTATION_180 : 세로 //--- Surface.ROTATION_270 : 가로 int rotation = display.getRotation();
- 화면 회전 금지 방법 1
- AndroidManifest.xml에서 모든 Activity에 다음을 추가 한다.
android:screenOrientation="portrait" //--- 세로 화면 고정 android:screenOrientation="landscape" //--- 가로 화면 고정
- 화면 회전 금지 방법 2
//--- public void onCreate(Bundle savedInstanceState) 함수에서 //--- setContentView(~); 다음에 아래 라인을 추가 한다.
//--- 세로 화면 고정
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
//--- 가로 화면 고정
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
- 화면이 회전해도 Activity가 다시 로딩되지 않도록 하는 방법
- Activity가 다시 로딩되지 않으므로 화면의 크기는 변하지 않는다. 따라서 수작업으로 화면을 조정해 주어야 한다.
- AndroidManifest.xml에서 모든 Activity에 다음을 추가 한다.
android:configChanges="keyboardHidden|orientation"
- 모든 Activity에 다음을 추가 한다.
@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); switch(newConfig.orientation) { case Configuration.ORIENTATION_PORTRAIT:
//--- 수작업으로 세로 화면 생성 break; case Configuration.ORIENTATION_LANDSCAPE:
//--- 수작업으로 가로 화면 생성 break; } }
- 화면 회전시 정보를 저장한 후 복구하는 방법
- public void onCreate(Bundle savedInstanceState)에 복구와 관련된 코딩을 한다.
Object obj = getLastNonConfigurationInstance() if (obj != null) { HashMap<String, Object> map = (HashMap<String, Object>) obj; //--- 저장된 복구 데이터로 화면 또는 Thread를 복구 한다. }
- public void onDestroy()에 화면 종료와 관련된 코딩을 한다.
public void onDestroy() { if (isFinishing()) { //--- 화면이 종료될 때, Thread 처리 등을 한다. //--- worker.interrupt(); //--- worker = null; } else { //--- 화면이 회전할 때 } super.onDestroy(); }
- public Object onRetainNonConfigurationInstance()에 화면 회전시 데이터를 저장하는 코딩을 한다.
public Object onRetainNonConfigurationInstance() { HashMap<String, Object> map = null; map = new HashMap<String, Object>(); //--- 화면 또는 Thread에서 복구할 데이터를 저장 한다. return map; }
- 참고 문헌
*** 참고 문헌 ***
'프로그래밍언어 > 패턴, 알고리즘, 프로토콜' 카테고리의 다른 글
이클립스 종류별 특징 (0) | 2011.08.24 |
---|---|
Activity 상태변화에 따른 호출 함수 (0) | 2011.07.14 |
android:id= (0) | 2011.06.24 |
넥서스S 이클립스 연동 (1) | 2011.06.24 |
파일 읽기 쓰기 락 시간 최대한 줄이기 (0) | 2011.03.16 |
댓글