본문 바로가기
개발/Android

[Android] 테마 변경 시 (onCreate, onDestory 대응)

by 준그래머 2023. 12. 18.
반응형

테마 변경 시 생명주기

안드로이드 테마 변경 시 이미 생성된 액티비티를 onDestory ⇒ onCreate 해주는 재 생성 과정을 겪게 된다. 문제는 이 과정에서 데이터를 초기화하지 않으면 onCreate 중에 크래시 또는 데이터가 이상하게 나오는 현상이 발생한다.

 

따라서 테마 변경 시 onConfigurationChanged 함수에서 호출하는 방법에 대해 정리할 예정이다.

 

테마 변경 시 onConfigurationChanged 호출 하기

AndroidManifest.xml에 속성 추가

<activity
    ...
    android:configChanges="uiMode"
    >
    ...
</activity>

 

위 속성이 추가되면 onConfigurationChanged 함수에서 관리할 수 있다.

@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    int currentNightMode = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
    switch (currentNightMode) {
        case UI_MODE_NIGHT_NO:
            Log.d(TAG, "onConfigurationChanged: Night mode is not active, UI MODE=" + UI_MODE_NIGHT_NO);
            break;
        case UI_MODE_NIGHT_YES:
            Log.d(TAG, "onConfigurationChanged: Night mode is active, UI MODE=" + UI_MODE_NIGHT_YES);
            break;
        case UI_MODE_NIGHT_UNDEFINED:
            Log.d(TAG, "onConfigurationChanged: We don't know what mode we're in, UI MODE=" + UI_MODE_NIGHT_UNDEFINED);
            break;
    }    
}

 

zFlip5 기준(Android13)으로 다크 모드로 테마 변경 시 아래와 같은 로그가 찍힌다.

12-18 17:46:34.877 D 23947 23947 JYPARK : onConfigurationChanged: Night mode is active, UI MODE=32

 

참조

 

어두운 테마  |  Android 개발자  |  Android Developers

어두운 테마 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 어두운 테마는 Android 10 (API 레벨 29) 이상에서 제공됩니다. 어두운 테마는 다음과 같은 여러 가

developer.android.com

 

How to get AppCompatDelegate current mode if default is auto

I have activity like this: package com.nkdroid.daynighttheme; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.app.AppCompatDelegate; import an...

stackoverflow.com

 

반응형