반응형
소개
- 구글 I/O 에서 dark theme 에 대해서 발표한 내용이다.
- Dark theme 를 끄고 켜는 방식으로 변경 됬다고 함.
- Dark theme 의 작동 방식은 크게 4가지로 구분 되어 짐
- Option A: Android Dark Theme 사용
- Theme.AppCompat.DayNight : 이미 사용 가능
- Theme.DeviceDefault.DayNight : Device 스타일에 맞춤
- ThemeOverlay.DeviceDefault.Accent.DayNight : Device 스타일에 맞춤
근데 함정은 빡치게도 위 3가지 다 안됨 아놔...
- Option B: Dark Theme 를 강제 On/Off 사용
- 사용자의 설정 여부와 상관 없이, 앱 내부 코드로 활성/비활성화 시킬 수 있다.
- Option C: 화면 구성에 따른 직접 커스터마이징
- Option D: DarkTheme 무시
- Option A: Android Dark Theme 사용
- 야간 모드는 android 9 / Pie 이상 부터 지원하는 모드 이다.
적용
style 을 이용한 방법
안드로이드 개발자 공식 홈페이지에서는 야간모드(dark mode) 를 사용 할 때 style 을 야간모드에 맞게 정의 한 뒤 매니페스트의 어플리케이션 태그에 스타일에
지정 시켜 주면, 적용 된다고 설명 하고 있다.
<style name="AppTheme" parent="Theme.AppCompat.DayNight" />
<application
...
android:theme="@style/AppTheme"
/>
시스템 설정에서 야간모드로 변경 후 다시 앱을 보았는데.
그런데 어쩐 일인지 이게 안 먹는다...;;
그래서 좀 더 뒤져 보니 아래의 코드로 바꾸면 사용자의 변경에 따라 앱의 색상도 자동으로 바뀌게 된다.
<style name="AppTheme" parent="@style/Theme.MaterialComponents.DayNight.NoActionBar">
단, 그래들에 머터리얼 의존성을 1.1.0 이상을 추가해줘야 한다.
현재 최신 버전은 1.2.0-alpha01 임.
implementation 'com.google.android.material:material:1.2.0-alpha01'
그런데 우리 앱은 style/theme 관리가 개판인데.. 망했다...- 안심하시라.. 그래서 또 다른 방법을 찾아냈다 ㅠ
시스템 변경 CallBack 을 이용한 방법
사용자가 야간모드를 사용 할 때, style 을 적용하여 자동으로 변경 되는 것이 아닌. 이를 알아채서 적용 시켜야 할 때가 있었다ㅠ
이것 저것 찾아 헤매다가 찾은 방법은 ComponentCallback 을 이용하여 사용자가 시스템 설정을 변경했음을 listening 하는 것!
getApplication().registerComponentCallbacks(new ComponentCallbacks() {
@Override
public void onConfigurationChanged(Configuration newConfig) {
// ui mode check...
isDarkUiMode(newConfig)
}
@Override
public void onLowMemory() {
}
});
public boolean isDarkUiMode(Configuration configuration){
return (configuration.uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES;
}
- 위 코드를 활용하면 사용자의 야간모드 활성/비활성을 감지하여 필요한 작업을 수행 할 수 있다.
- 필자는 custom layout 을 적용한 notification 을 사용하고 있었는데, 야간모드에 맞게 변경해야 할 기능이 필요했다.
- 위 코드를 활용하면 이벤트를 수신했을 때, 야간모드에 맞게 만들어진 layout 을 적용시키고, 다시 새롭게 notification 을 띄우는 것으로 해결 했다. ㅠ..
이상으로 포스팅 끝!
감사합니다.
반응형
'Develop > Android' 카테고리의 다른 글
[Android] Foldable Phone(폴더블 폰) 접힘 여부 알아내는 법 (0) | 2020.06.23 |
---|---|
[Android] SMS 자동으로 읽어오기 (0) | 2020.05.22 |
[Android] Doze Mode (0) | 2020.04.08 |
[Android] 앱 업데이트 이후 실행 여부 체크하기 (0) | 2020.04.07 |
[Android] Apk signing key 와 .keystore, hash key (0) | 2020.04.06 |