< 개발 환경 > < 프로젝트 적용 > |
안드로이드/Android 아이스크림 샌드위치(4.0) 이상 버전 화면 전환시 Activity 재생성 방지 속성 ~!
안녕하세요. 기존에 아이스크림 샌드위치(4.0) 이하 버전에서 화면을 가로/세로 모드로 전환시 Activity 재성성을 방지하기 위해 AndroidManifest.xml의 해당 Activity에 "android:configChanges="orientation" 속성을 추가해 줘서 화면 전환시 Activitry 재생성을 방지 했는데요.
아이스크림 샌드위치(4.0) 버전이 등장 함으로써 기존에 "android:configChanges="orientation" 속성만으로 화면 전환시 Activity 재생성을 방지 할 수 없게 되었습니다.
아이스크림 샌드위치(4.0) 에서 화면전환시 Activity 재생성을 방지하기 위해서는 한가지 속성을 더 추가 해줘야 하는데요. 바로 요녀석을 추가해 주시면 됩니다.
android:configChanges="orientation|screenSize"
<AndroidManifest.xml 에 해당 Activity에 설정>
1) 아이스크림 샌드위치(4.0) 이상 버전에서 Activity 속성을 추가하지 않은 경우
2) 아이스크림 샌드위치(4.0) 이상 버전에서 Activity 속성을 추가한 경우
주의사항!!! : 만약 폴더별로 land(가로), port(세로) xml을 다르게 적용 하였다면, configChanges 속성을 설정해 주어도 화면 전환시 곧바로 해당 폴더의 xml을 참조하지 않습니다. 만약 세로 모드에서 작업을 하고 있는데 가로 모드로 변경한다면 기존 세로모드에서 사용했던 xml이 그대로 화면에 보여지게 됩니다.
flow : 세로 모드 작업 -> 가로 모드 전환 -> 세로 모드 XML 계속 보여짐
하지만 해당 xml을 종료 한 후 xml을 다시 실행하게 되면 정상적으로 가로 모드의 xml이 보여지게 됩니다. 화면 전환시 곧바로 해당 모드의 xml을 참조하지 않는 문제점을 해결 하기 위해서는 onConfigurationChanged() 메서드에서 작업을 해주면 됩니다.
onConfigurationChanged() 메서드는 Activity 화면 전환시 호출되는 메서드 입니다. Acitivity layout 말고도 inflate 팝업이나 xml를 활용한 작업의 모드별 레이아웃 적용에 유용하게 사용할 수 있습니다.
@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) // 세로 전환시 { setContentView(R.id.port_activity); } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)// 가로 전환시 { setContentView(R.id.land_activity); } }
파일첨부 :
TestActivityConfigChangesICS.zip
감사합니다.
'Android > Activity' 카테고리의 다른 글
안드로이드/Android Context를 이용해 Activity에 있는 메서드 호출 하기~! (5) | 2013.01.25 |
---|---|
안드로이드/Android Acitivity 실행시 화면 모드 얻어 오기 ~! (가로 / 세로) (2) | 2013.01.22 |
안드로이드/Android Activity onWindowFocusChanged 메서드란? (2) | 2013.01.16 |
안드로이드/Android Flag Activity 사용법 및 주의사항 ~! (4) | 2013.01.12 |
안드로이드/Android 액티비티(Activity) 반투명 처리 하기 (1) | 2012.07.05 |