android:configChanges="screenLayout|screenSize|smallestScreenSize|density|orientation|layoutDirection|locale|fontScale"
화면이 회전해 가로/세로모드가 변경될 때에는 onDestroy() 이후 onCreate()가 다시 시작된다고 했었다.
하지만 화면이 돌아갈 때마다 onCreate()부터 시작해서 모든 값들을 다시 가져올 필요는 없지 않은가.
온라인에서 뭔가를 다운로드 해야 하는 상황을 가정하면 더 그렇다.
회전을 하면 처음부터 다시 다운받는다니. 아 이건 좀.
화면을 돌리더라도 지금까지의 상태를 지속하면서 화면 구성만 변경할 수 있다면 좋지 않을까?
Manifest에서 수정할 수 있는 Activity별 configChanges는 그런 편의성을 제공한다.
Activity의 configChanges값에 '변경될 수 있는 설정'들을 지정해주면, 이 설정들이 변경되더라도 액티비티가 재시작되지 않는다.
이렇게 하면, onDestroy() -> onCreate() 대신에 onConfigurationChanged() 메서드가 실행되어 view가 유지된다.
설정 방법
AndroidManifest.xml 파일에는 어플리케이션과 관련된 여러가지 정보들이 기록되어 있다.
어플리케이션에 포함된 Activity들에 대한 정보도 여기에 포함되며, <activity>태그 안에 각 액티비티 정보가 제공된다.
이 태그 안에 android:configChanges 값을 설정하면 '변경되더라도 상태를 유지할 설정값'들이 지정된다.
이를테면 아래 내용과 같이 지정할 수 있다.
<activity
android:name=".MainActivity"
android:configChanges="keyboardHidden|orientation|screenSize"/>
이 acitivity에는 configChanges로 keyboardHidden, orientation, screenSize의 3가지가 지정되었다.
keyboardHidden은 키보드를 띄우고 다시 숨길 때 설정을 유지하겠다는 뜻이고,
orientation은 화면의 가로모드/세로모드가 전환될 때 설정을 유지하겠다는 뜻이다.
화면이 회전할 때에는 orientation 외에 screenSize 속성도 함께 설정해 주어야 정상적으로 적용된다.
이렇게 설정해 준 이후에 액티비티를 실행하고 화면을 전환해 보면 액티비티가 리셋되지 않고 돌아가기만 하는 것을 볼 수 있다.
configChanges를 설정해 준 값들에 대해서는 onDestroy() -> onCreate() 대신 onConfigurationChanged()가 호출된다.
따라서 만약 화면 전환에 따라 layout을 다르게 바꿔 주고 싶다면 이 메서드를 오버라이딩해서 수정하면 된다.
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
if (resources.configuration.orientation == ORIENTATION_LANDSCAPE) { // landscape
recycler_view.layoutManager = glManager // grid layout
} else { // portrait
recycler_view.layoutManager = llManager // linear layout
}
}
예를 들어 위와 같이 onConfigurateionChanged 함수 안에서 orientation 변경 시에 실행할 내용을 설정해 줄 수 있다.
이 코드에서는 resources.configuration.orientation이 가로(ORIENTATION_LANDSCAPE)일 경우에는 그리드 레이아웃을,
세로(ORIENTATION_PORTRAIT)일 경우에는 리니어 레이아웃을 선택하는 방식으로 화면 구성을 변경하였다.
출처: https://holika.tistory.com/entry/내-맘대로-정리한-안드로이드-configChanges-화면이-돌아가도-상태는-유지하고-싶어요
Designed by sketchbooks.co.kr / sketchbook5 board skin
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5