앱의 테마(라이트/다크)를 변경하기 위한 작업 진행
// 라이트모드시 흰색, 다크모드시 검정색 적용 케이스
// color.xml
<color name="color_dark_ffffff">#FFFFFF</color>
// color.xml(night)
<color name="color_dark_ffffff">#212121</color>
styles.xml 파일로 테마를 지정하는 등의 경우도 동일하다.if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
context.resources.configuration.isNightModeActive
} else {
val uiModeManager = context.getSystemService(Context.UI_MODE_SERVICE) as UiModeManager
uiModeManager.nightMode == UiModeManager.MODE_NIGHT_YES
}
// 앱 다크모드는 API 29 이상부터 지원
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
if (isDarkModeActive()) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
} else {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
}
} else {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
}
앱 테마 변경 시점은 Application 클래스의 onCreate()에 작성했다.
(2023.09.21 수정) 앱 테마 변경을 스플래시 액티비티에서 하는거로 수정했다.
“시스템 설정 시간에 따라 테마가 변경하도록 되어있는데 앱에 적용이 안된다” 이슈 유입
단순히 앱을 종료한 후(ex.backpress) 엔 앱 프로세스가 살아있고, 프로세스가 살아있는 상태에는 Application클래스에 진입하지 않는다. 메모리 소거 등의 방법으로 프로세스를 kill 해야 진입한다.
이 때문에 이슈가 발생했다고 판단했고, 해당 로직을 앱 시작점인 스플래시 액티비티로 옮겨 앱 진입시마다 체크를 해서 테마를 변경하게끔 수정했다.
.. / res / mipmap-anydpi-v26
.. / res / mipmap-night-anydpi-v26