安卓夜間模式開發【深色主題適配】

1.創建文件夾

就在res 下新建 values-night目錄,創建對應的colors.xml文件。如果適配圖片的話,就創建對應的 drawable-night目錄。

 正常情況下,系統會調用values裏面的顏色還有主題等信息,當切換到深色模式的時候,系統就會調用“-night”的文件夾裏面的信息,所以當你需要深色模式的圖片時,對應就需要創建“mipmap-xxhdpi-night”等等

2.主題設置

valuesvalues-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裏重新設置!!切記,像這樣

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章