본문 바로가기

안드로이드/코틀린

[Android] 다크 테마 적용하기

반응형

 Android 10 ( API 29 ) 부터 제공되어 여러 장점을 가지고 있습니다.

-  전력 사용량을 절약

- 시력이 낮거나 밝은 빛에 민감한 유저의 가시성 개선 

- 한낮에 직사광선에 노출되는 경우 가시성 개선 

 

다크 테마는 디바이스뿐만 아니라 각 앱 별로도 설정이 가능합니다.

기본적으로 앱에는 디바이스 테마를 따라가도록 되어 있지만 설정 값을 제공하는 앱들을 간혹 보신적이 있으실 겁니다.

 

예시 

아래 앱은 제가 운영중인 톡썰만들기 앱입니다. 

 

꼭 필요한가? 

그렇진 않습니다. 하지만 있다면 플러스 요인인건 맞다고 생각합니다.

저도 디바이스 다크모드를 사용하지 않기 때문에 필요성을 못 느꼈지만 유저의 요구 사항이 있어 추가하게 됐습니다.

 

다크 테마 적용

아래 코드를 테마설정하는 화면과, 앱 시작하는 화면에 추가해주시면 됩니다. 

    private fun initTheme( theme: String) {
        when (theme) {
            "라이트 테마" -> {
                AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
            }

            "다크 테마" -> {
                AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
            }

            else -> {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
                } else {
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY);
                }
            }
        }
    }

그리고 SharedPreference로 사용자가 선택한 테마 값에 따라 설정되도록 작업합니다. 

 

테마별 리소스 관리 

다크테마 설정 추가시 다크테마용 색상이나 이미지를 추가해야합니다.

 

주의사항

다크테마를 사용하지 않을 경우 {folder name}-night 폴더가 생성되어 있는지 확인해서 지워야 합니다.

그렇지 않으면 다크테마를 사용하는 유저에겐 끔찍한 화면으로 노출될 수 있습니다.

특히 테마 폴더의 경우, 제거하지 않으면 noActionbar로 설정했던 테마가 되살아나서 유저에게 끔찍한 경험을 줄 수 있으니 주의해주세요'

 

예시 

제가 개발중인 또다른 앱인데 왼쪽이 의도한 디자인이고 오른쪽이 다크테마를 적용하지 않지만 폴더를 삭제하지 않았을때 입니다. 

반응형