안드로이드/CS

configChanges

김어찐 2022. 11. 2. 14:25
728x90

설정 변경이 발생됐을때 지금의 상태를 지속하면서 화면 구성만 변경할 수 있는방법이다

 

Manifest에서 수정할 수 있는 Activity별 configChanges는 그런 편의성을 제공한다.

Activity의 configChanges값에 "변경될 수 있는 설정"드를 지정해주면, 이 설정들이 변경되더라도 액티비티가 재시작되지않는다.

 

이렇게 하면

onDestroy() -> onCreate() 대신에 onConfigurationChanged() 메서드가 실행되어 view가 유지된다.

 

설정방법

Manifest.xml에 activity에 설정

        <activity
            android:name=".MainActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"/>

 

onConfigurationChanged()

configChanges에 설정해 둔 값들에 대해서는 onDestroy() -> onCrate() 대신 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
        }
    }

예를 들어 위와 같이 onConfigurationChanged 함수 안에서 orientation 변경 시에 실행할 내용으 설정해 줄 수 있다.

이 코드에서는 resources.configuration.orientation이 가로(ORIENTATION_LANDSCAPE)일 경우에는 그리드 레이아웃을, 세로(ORIENTATION_PORTRAIT)일 경우에는 리니어 레이아웃을 선택하는 방식으로 화면 구성을 변경하였다.

728x90