[Android] 다크 모드 스타일 비활성화 하기

H43RO·2021년 11월 1일
2

미세먼지 팁

목록 보기
3/3
post-thumbnail

KeepIt! - 당신을 위한 똑똑한 쇼핑 리마인더, 킵잇!

https://play.google.com/store/apps/details?id=com.haero_kim.pickmeup

최근에 필자는 킵잇 이라는 안드로이드 앱을 출시한 적 있다. (많이 다운받아주세요) 그러나 출시 이후 몇몇 사용자들에게서 중대한 버그를 보고받았다.

리젝 없이 출시 성공! 그런데...

'해로님, 이거 원래 UI 가 이런가여?'

아니다... 아니다... 절대 아니다... 원래 앱의 모습은 아래와 같다.

게다가 글씨 색깔조차 흰 색으로 되어버려서 흰 배경에서는 아무 글씨도 안 보이는 문제까지 발생했다. 무언가 분명히 잘못됐다! 정말 아차 싶었다. 원인은 바로 '다크모드 미구현'이었다. 이러한 멍청한 짓을 하게 된 계기는 다음과 같다.


Night Style

안드로이드 앱은 스타일을 지정해줄 때 기본적으로 Day와 Night를 구분하여 작성한다. 이는 라이트 / 다크 모드 지원을 위함이다. 그러나 필자는 다크모드를 별로 선호하지 않는 탓에 테스트 기기를 항상 라이트 모드로 구동해둔 상태였고, 테스트할 때 다크모드를 완전히 망각하고 있었던 것이다.

<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Theme.App" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
        <!-- Primary brand color. -->
        <item name="colorPrimary">@color/purple_200</item>
        <item name="colorPrimaryVariant">@color/purple_700</item>
        <item name="colorOnPrimary">@color/black</item>
        <!-- Secondary brand color. -->
        <item name="colorSecondary">@color/teal_200</item>
        <item name="colorSecondaryVariant">@color/teal_200</item>
        <item name="colorOnSecondary">@color/black</item>
        <!-- Status bar color. -->
        <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
        <!-- Customize your theme here. -->
    </style>
</resources>

따라서 Night 스타일 기본 코드가 위처럼 처음 그대로 남아있었고, 앱이 갑자기 보라색 돌연변이마냥 괴이하게 변형되어 버린 것이다. (물론 라이트모드에선 정상 동작했다)

킵잇은 아직 다크모드를 지원하지 않기 때문에, 조속히 다크모드 비활성화 업데이트가 필요했다. 재빨리 업데이트를 제출하고나서 검토가 너무 오래걸리길래 발을 동동 구르곤 했다. 무려 2일 만에 패치가 이루어졌다 ㅠㅠ

암튼, 본론으로 돌아가서 다크 모드를 비활성화하는 방법을 알아보자.


다크 모드 비활성화

꽤나 간단한 방법으로 다크 모드를 비활성화할 수 있다. 최상위 실행단위인 Application 클래스의 onCreate() 에, 아래와 같은 코드를 기입해준다.

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)

만약 이를 진입점 Activity 에 적용하면 여러 번 실행되어 버리기 때문에, 꼭 최상위 실행단위인 Application 클래스에 추가해주도록 하자. 최종적인 형태는 다음과 같다.

override fun onCreate() {
    super.onCreate()
    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
}

그 다음은요?

... 없다. 저렇게만 해주면 다크 모드 활성화 상태에서 앱을 키더라도, Day 스타일이 적용되어 표시된다. 이 간단한 작업을 안 해주고 출시를 해버려서, 꽤나 많은 사용자들에게 안 좋은 첫인상을 남기고 말았다 🤦🏻‍♂️

스타일을 나누어 작성하는 것이 기본값인 만큼 앞으로 앱 출시 전에 꼭 조심해야 할 것 같다.


물론 킵잇도 추후 다크 모드 스타일을 제공해줄 예정이다.

profile
어려울수록 기본에 미치고 열광하라

0개의 댓글