1.創建文件夾
就在res 下新建 values-night目錄,創建對應的colors.xml文件。如果適配圖片的話,就創建對應的 drawable-night目錄。
正常情況下,系統會調用values裏面的顏色還有主題等信息,當切換到深色模式的時候,系統就會調用“-night”的文件夾裏面的信息,所以當你需要深色模式的圖片時,對應就需要創建“mipmap-xxhdpi-night”等等
2.主題設置
在values和values-night裏面把你的主題設置爲繼承“Theme.AppCompat.DayNight”或者是它的子類“Theme.AppCompat.DayNight.NoActionBar”等,這是我的主題
colors.xml這個文件,要保證在values和values-night這兩個文件夾裏面是一樣的,裏面參數的名字要保證一模一樣 參數值可以設置爲不一樣,白天模式的顏色值可以設置在values的color裏面,深色模式的顏色值設置在values-night裏面。
這是我獲取到的微信的顏色設置,如果有需要的話,可以使用一下。
3.監聽深色主題是否開啓
我們還可以監聽到暗黑的主題是否開啓
(1)在清單文件中給對應的Activity配置 android:configChanges=“uiMode”:
<activity android:name=".MainActivity"
android:configChanges="uiMode">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
(2)在onConfigurationChanged方法中獲取:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
int currentNightMode = newConfig.uiMode & Configuration.UI_MODE_NIGHT_MASK;
switch (currentNightMode) {
case Configuration.UI_MODE_NIGHT_NO:
//關閉夜間模式
Log_Ma.e("=======", "=====關閉夜間模式====");
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
ActivityManager.getAppManager().finishAllActivity();
startActivity(MainActivity.class);
break;
case Configuration.UI_MODE_NIGHT_YES:
//打開夜間模式
Log_Ma.e("=======", "=====開啓夜間模式====");
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
ActivityManager.getAppManager().finishAllActivity();
startActivity(MainActivity.class);
break;
default:
break;
}
}
這時,可以通過系統的設置切換暗黑模式的關閉和開啓。
setDefaultNightMode參數有以下幾種模式:
淺色 - MODE_NIGHT_NO
深色 - MODE_NIGHT_YES
由省電模式設置 - MODE_NIGHT_AUTO_BATTERY
系統默認 - MODE_NIGHT_FOLLOW_SYSTEM
4.總結
其實現在還有點問題,微信可以在設置深色模式之後直接在後臺切換不崩潰,但是這種方式只能在桌面重新打開纔可以,目前還沒有找到一個更好的方式解決,我再想想看吧
注意!!!
一旦在manifest裏面設置了android:configChanges的話,那麼在代碼裏面設置的屏幕方向就不好使了,必須要在manifest裏重新設置!!切記,像這樣