Home 안드로이드 다크 모드 스위치 전환 끊김 해결
Post
Cancel

안드로이드 다크 모드 스위치 전환 끊김 해결

안드로이드 다크 모드 스위치 전환 끊김

스위치를 통해 라이트/다크 모드를 전환 하는 코드를 만들었더니 앱에서 모드가 스위치로 모드가 전환될 때마다 스위치가 움직이는게 끊기는 현상이 나타났다

그래서 해당 문제를 해결하기 위해서 다양한 방법들을 찾아보았는데 이번 글에선 해당 방법들에 대해 소개할 것이다

다크 모드 전환 시 딜레이 주기

1
2
3
4
5
6
7
Handler().postDelayed({
    if (isChecked) {
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
    } else {
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
    }
}, 250)

스위치 클릭 시 이런 식으로 라이트/다크 모드 바꾸는 부분에 딜레이를 줘 스위치가 버튼이 넘어가고 라이트/다크 모드가 바뀌기 때문에 끊기는 문제가 보이지 않는다

앱 전체가 아닌 특정 액티비티만 전환

라이트/다크 모드 전환을 모든 앱 전체에서 시키지 않고 특정 액티비티에서만 전환하여 끊김을 최소화하는 방법으로

1
2
3
4
5
6
7
8
9
activity?.let { activity ->
val nightMode = if (isChecked) {
    AppCompatDelegate.MODE_NIGHT_YES
} else {
    AppCompatDelegate.MODE_NIGHT_NO
}
(activity as? AppCompatActivity)?.delegate?.localNightMode = nightMode
activity.recreate()
}

확실히 위 코드를 사용해보면 끊김이 앱 전체를 전환하는 것보다 안보이거나 아예 없는 걸 확인해볼 수 있다

애니메이션으로 눈속임하기

1
2
3
4
5
6
7
8
<style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
    <item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item>
</style>

<style name="WindowAnimationTransition">
    <item name="android:windowEnterAnimation">@android:anim/fade_in</item>
    <item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>

이건 개인적으로 체감이 별로 안되던 방법이긴 한데 그래도 소개하자면 위의 코드는 다크 모드 전환 시 페이드 인/아웃 효과를 적용하여 끊김 현상을 최소화한다고 한다

This post is licensed under CC BY 4.0 by the author.