안드로이드 리소스 정책 #3
AndroidManifest.xml 파일에 속성 중에 리소스 identifier 와 비슷한 속성 설정이 있는데 아래와 같다.
android:configChanges 값이 아무것도 없을 때는 단말을 돌려서 단말 표시 모드가 portrait mode -> landscape mode 가 되면 위에서 설명된 것과 같이 기본 동작은 Activity 가 destroy 되었다가 다시 시작합니다.
android:configChanges = "orientation" 이 설정되면, portrait mode -> landscape mode 가 되어도, Activity는 destroy 되지 않습니다. 대신에 Activity에 override 된 onConfigurationChanged() 함수가 호출되며, 여기서 환경변화 ( config changes ) 에 대한 처리를 해줍니다.
이거 그냥 Activity 가 재시작되도록 둬도 될 것 같은데.. 왜, 언제 사용해요?
가장 흔하게 접할 수 있는 경우가 위에서 예를 든 orientation changes 경우입니다.
마찬가지로 흔하게 접할 수 있는 것이 keyboardHidden 입니다.
keyboardHidden 은 hardware keyboard가 보이냐 안 보이냐에 따라서 발생하는 변화입니다.
가장 대표적인 hardware keyboard를 갖춘 device인 옵티머스 Q를 보면, 슬라이드 형식으로 QWERTY 자판을 꺼냈다 숨겼다 할 수 있죠.
이 때 변화가 없어도 되는데 쓸데 없이 Activity 가 파괴되고 생성되면 안 되겠죠? 그래서 QWERTY 자판이 있을 경우는 거의 대부분 이 attribute 설정이 필요하게 됩니다.
그 외에도 configChanges 가 발생했을 때 단순한 Activity의 재시작 이외에 추가적 작업을 해 줄 때에도 사용됩니다.
그럼 configChanges에 들어갈 수 있는 값들은 뭐가 있나요?
먼저 configChanges에는 여러가지 값들을 '|' ( or ) 구분자를 통해서 함께 입력 가능합니다.
Value | Description |
"mcc" | SIM 이 Detect 되고 MCC 가 Update 될 경우. ( IMSI Mobile Country Code가 변했을 때 ) |
"mnc" | SIM 이 Detect 되고 MNC 가 Update 될 경우. ( IMSI Mobile Network Code가 변했을 때 ) |
"locale" | User 가 새로운 Language 를 선택했을 때 ( Locale 이 변경될 때 ) |
"touchscreen" | Touch Screen Hardware 가 바뀌었을 때 ( 보통은 절대 일어나지 않는 Case 임 ) |
"keyboard" | User 가 External Keyboard를 꽂았을 때를 비롯하여 Keyboard 의 Type 변경시. |
"keyboardHidden" | User 가 Hardware Keyboard를 보이고 감추는 등의 Keyboard의 Accessibility가 변경되었을 때 |
"navigation" | Navigation Type ( 트랙볼 / DPad ) 가 변경되었을 때 ( 보통 절대 일어나지 않는 Case ) |
"orientation" | User가 Device 를 돌리는 등의 행위로 Screen 의 Orientation 이 변경되었을 경우. |
"screenLayout" | Screen의 Layout이 변했을 때, 다른 Display 가 Activate 되었을 경우 Layout이 변한 경우 |
"fontScale" | User 가 새로운 Font Size 를 선택했을 때. |
"uiMode" | User 가 Device 를 Desk 나 Car Dock 등에 비치하여 Interface Mode 를 바꾸었을 때. |
펌 : http://aroundck.tistory.com/36
'나는 프로그래머다! > Java & Android' 카테고리의 다른 글
안드로이드 기본개념 면접대비 정리 (0) | 2019.07.15 |
---|---|
[안드로이드-API] Layout Traversal (0) | 2016.07.08 |
[Java] String, StringBuffer, StringBuilder 차이 (0) | 2016.06.17 |
[Java] Collection Framework 간단 정리 (0) | 2016.06.17 |
안드로이드 리소스 정책 #4 - 관리 및 방법 편 (0) | 2016.04.28 |
안드로이드 리소스 정책 #2 (0) | 2016.04.19 |
안드로이드 리소스 정책 #1 (0) | 2016.04.19 |
[JAVA] Primitive type과 Reference type 그리고 Object 클래스 (0) | 2016.04.12 |
Eclipse 에서 Tap을 Space로 변경하기 (0) | 2016.03.31 |
PreferenceActivity 와 Fragment (0) | 2016.03.10 |