Android Q 深色主題舉例 瞭解深色主題如何應用,第一手資料是 "官方文檔" 與 相應的 "Google Sample" 官方文檔:DayNight — Adding a dark theme to your app: "https://medium.com/androiddevelopers ...
Android Q 深色主題舉例
瞭解深色主題如何應用,第一手資料是 官方文檔 與 相應的 Google Sample
官方文檔:DayNight — Adding a dark theme to your app:
https://medium.com/androiddevelopers/appcompat-v23-2-daynight-d10f90c83e94
官方文檔:Dark theme:
https://developer.android.com/preview/features/darktheme
官方案例:android-DarkTheme
https://github.com/googlearchive/android-DarkTheme
一、深色主題簡介
從Support Library 23.2.0 開始,AppCompat 新增了主題:Theme.AppCompat.DayNight
- 其允許APP在
深色主題
和亮色主題
之間切換 - 可以大幅減少耗電量(
OLED顯示屏
的設備上,深色主題
較亮色主題
有更加持久的續航能力) - 改善弱視以及對強光敏感的用戶的可視性
- 讓所有人都可以在光線較暗的環境中更輕鬆地使用設備,從而提升用戶體驗
而從Android Q(10.0)開始,Android設置中新增 深色主題背景
切換按鈕(設置-顯示-深色主題背景)。
因此Android App支持夜間模式,需提上開發日程了...
二、如何使用
2.1 主題設置
APP主題需繼承Theme.AppCompat.DayNight
或 Theme.MaterialComponents.DayNight
,以下為代碼舉例。
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
<!-- Customize your theme here. -->
</style>
2.2 監聽Android Q 系統主題變化
若需要監聽系統主題,例如設置-顯示-深色主題背景 切換動作。
Activity添加android:configChanges="uiMode"
<activity
android:name=".MyActivity"
android:configChanges="uiMode" />
Activity中重寫 onConfigurationChanged 方法
/**
* Android系統設置中 "設置-顯示-深色主題背景" 切換後,回調該方法
*/
Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
int mSysThemeConfig = newConfig.uiMode & Configuration.UI_MODE_NIGHT_MASK;
switch (mSysThemeConfig) {
// 亮色主題
case Configuration.UI_MODE_NIGHT_NO:
break;
// 深色主題
case Configuration.UI_MODE_NIGHT_YES:
break;
}
}
2.3 切換App主題
App 中切換應用主題,首先需調用AppCompatDelegate.setDefaultNightMode(int mode)
方法,並調用recreate()
方法使更改生效。
// 切換到 深色主題
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
// 需調用 recreate() ,從而使更改生效
recreate();
AppCompatDelegate.setDefaultNightMode(int mode)
方法有四個參數選項,具體介紹如下:
// 亮色主題
ThemeHelper.Mode.LIGHT
// 暗色主題
ThemeHelper.Mode.DARK
// 跟隨 系統設置(系統深色模式,則深色模式;系統淺色模式,則淺色模式)
AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM
// 省電模式時 深色模式;非省點模式時 淺色模式
AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY
2.4 監聽App主題變化
若需要監聽App的主題變更,可重寫以下方法
/**
* 回調當前應用的使用主題
*/
@Override
protected void onNightModeChanged(int mode) {
super.onNightModeChanged(mode);
switch (mode) {
// 亮色主題
case AppCompatDelegate.MODE_NIGHT_NO:
break;
// 暗色主題
case AppCompatDelegate.MODE_NIGHT_YES:
break;
// 省電模式時 深色模式;非省點模式時 淺色模式
case AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY:
break;
// 跟隨 系統設置(系統深色模式,則深色模式;系統淺色模式,則淺色模式)
case AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM:
break;
}
}
2.5 自定義背景顏色
新建
values-night
文件夾
將
values/styles.xml
拷貝到values-night/styles.xml
values/styles.xml
與values-night/styles.xml
主題代碼舉例如下
values/styles.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
<!-- Customize your theme here. -->
</style>
</resources>
values-night/styles.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- Customize your theme here. -->
</style>
</resources>
- 將
values/colors.xml
拷貝到values-night/colors.xml
更改test_text_bg
屬性的顏色值
values/colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">@android:color/white</color>
<color name="test_layout_bg">@android:color/white</color>
<color name="test_text">@android:color/black</color>
<color name="test_text_bg">#008577</color>
</resources>
values-night/colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">@android:color/black</color>
<color name="test_layout_bg">@android:color/black</color>
<color name="test_text">@android:color/white</color>
<color name="test_text_bg">#D81B60</color>
</resources>
三、OK 完事大吉
案例源碼下載地址:
https://github.com/AndroidAppCodeDemo/Android_Dark_Test