Android10系統(tǒng)開始坦报,谷歌引入深色主題的特性,適配方案有兩種狂鞋,第一種是自動強制適配方案(Force Dark); 第二種是手動適配方案(資源替換)片择。
- Force Dark:
在res目錄下創(chuàng)建value-v29目錄并創(chuàng)建styles.xml文件,復制一份你app style進去并添加<item name="android:forceDarkAllowed">true</item>骚揍,因為這個設置只能在Android系統(tǒng)10.0才能使用字管,所以不能直接設置在原來的app style,當程序運行在10.0以上系統(tǒng)才會讀取value-v29目錄信不。
<style name="AppTheme.NoActionBar">
<!--標題欄的顏色-->
<item name="colorPrimary">@color/colorPrimary_xueHui</item>
<!--狀態(tài)欄的顏色-->
<item name="colorPrimaryDark">@color/colorPrimary_xueHui</item>
<!--默認的光標嘲叔、選中的RadioButton顏色-->
<item name="colorAccent">@color/colorPrimary_xueHui</item>
<item name="android:forceDarkAllowed">true</item>
</style>
注意:
①. 如果使用的是 DayNight 或 Dark Theme 主題,則設置forceDarkAllowed 不生效抽活。
②. 此種方案可能在深色主題顏色上會不盡人意硫戈,如果想在局部上排除適配的話可以對應的view上設置forceDarkAllowed為false。
-
手動適配方案:
把你的app styles的parent指向DayNight主題下硕,在這個主題下丁逝,開發(fā)者沒有給控件顏色進行硬編碼的話(沒有設置顏色固定值),系統(tǒng)就會自動轉換深色主題梭姓,然后針對那些進行了硬編碼的顏色適配就需要進一步操作了霜幼,在res目錄下創(chuàng)建value-night目錄并創(chuàng)建colors.xml文件,然后在普通value目錄下的colors的需要適配的顏色都復制一份到value-night目錄下colors.xml并指定深色模式的具體顏色值,到這里就完成了誉尖,因為系統(tǒng)指定深色主題狀態(tài)下會讀取value-night目錄罪既。
代碼判斷深色主題是否開啟
public static boolean isNightMode(Context context) {
int currentNightMode = context.getResources().getConfiguration().uiMode &
Configuration.UI_MODE_NIGHT_MASK;
return currentNightMode == Configuration.UI_MODE_NIGHT_YES;
}
監(jiān)聽深色主題是否開啟
<activity
android:name=".MyActivity"
android:configChanges="uiMode" />
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
int currentNightMode = newConfig.uiMode & Configuration.UI_MODE_NIGHT_MASK;
switch (currentNightMode) {
case Configuration.UI_MODE_NIGHT_NO:
// 關閉
break;
case Configuration.UI_MODE_NIGHT_YES:
// 開啟
break;
default:
break;
}
}