출처: http://minche.tistory.com/22
안드로이드 폰의 슬라이드가 열리고(landscape), 닫혀서(portrait) 화면이 전환될 때
필요한 처리를 삽입하는 부분입니다.
아래 코드와 같이 액티비티 코드 내에 onConfigurationChanged() 함수를 오버라이딩하여 사용하면 됩니다.
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { // 슬라이드 닫힐때
Log.i(LOGTAG, "=== Configuration.ORIENTATION_PORTRAIT !!! ===");
} else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { // 슬라이드 열릴때
Log.i(LOGTAG, "=== Configuration.ORIENTATION_LANDSCAPE !!! ===");
}
}
//////////////////////////////////////////////////////////////////////////
출처: http://bhnbhn.tistory.com/entry/Android-Portrait-Landscape-Mode-%EC%97%90-%EB%94%B0%EB%A5%B8-Activity-%EC%A0%81%EC%9A%A9
#1. Portrait, Landscape Mode Check
1)
getWindowManager().getDefaultDisplay().getOrientation();
2)
int screenHeight = getWindow().getWindowManager().getDefaultDisplay().getHeight();
int screenWidth = getWindow().getWindowManager().getDefaultDisplay().getWidth();
if (screenWidth > screenHeight) { }
3)
public void onConfigurationChanged (Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == newConfig.ORIENTATION_PORTRAIT) {
} else {
}
}
** onConfigurationChanged() 를 override 하기 위해서는 Activity를 상속받아야 한다.
#2. Portrait, Landscape에 따른 XML을 각각 구성
- res/layout-land
- res/layout-port
/////////////////////////////////////////////////////////////////////
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(ConfigurationnewConfig) {
super.onConfigurationChanged(newConfig);
switch(newConfig.orientation) {
caseConfiguration.ORIENTATION_PORTRAIT:
//--- 수작업으로 세로 화면 생성
break;
caseConfiguration.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 = newHashMap<String, Object>();
//--- 화면 또는 Thread에서 복구할 데이터를 저장 한다.
return map;
}
· 참고 문헌
· 안드로이드 UI 디자인 패턴, 2010.5.19 by Google
· Icon Design Guidelines, Android 2.0
· Supporting MultipleScreens, 2010.5
· 화면 회전을 빠르게 처리하기 (Faster Screen Orientation Change),2010.6
*** 참고 문헌 ***
'구글과인터넷 > 안드로이드' 카테고리의 다른 글
안드로이드 팝업창 만들기 (0) | 2012.12.12 |
---|---|
안드로이드 플레그먼트 레이아웃 관련 (0) | 2012.12.12 |
안드로이드 동영상 재생 (0) | 2012.12.12 |