안드로이드

화면회전

사라링 2012. 5. 8. 18:37

 

화면 회전

  • 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;
}
  • 참고 문헌


*** 참고 문헌 ***

이 글은 스프링노트에서 작성되었습니다.