將 DayNight 主題新增到應用程式

DayNight 主題為應用程式提供了基於一天中的時間和裝置的最後已知位置來切換顏色方案的強大功能。

將以下內容新增到 styles.xml

<style name="AppTheme" parent="Theme.AppCompat.DayNight">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
</style>

你可以擴充套件為新增日夜主題切換功能的主題如下:

  • Theme.AppCompat.DayNight
  • Theme.AppCompat.DayNight.NoActionBar
  • Theme.AppCompat.DayNight.DarkActionBar

除了 colorPrimarycolorPrimaryDarkcolorAccent 之外,你還可以新增你想要切換的任何其他顏色,例如 textColorPrimarytextColorSecondary。你也可以將此應用的自定義顏色新增到此 style 中。

要使主題切換工作,你需要在 res/values 目錄中定義預設的 colors.xml,在 res/values-night 目錄中定義另一個 colors.xml,並相應地定義日/夜顏色。

要切換主題,請從 Java 程式碼中呼叫 AppCompatDelegate.setDefaultNightMode(int) 方法。 (這將改變整個應用程式的顏色方案,而不僅僅是任何一個活動或片段。)例如:

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);

你可以根據你的選擇通過以下三種中的任何一種:

  • AppCompatDelegate.MODE_NIGHT_NO:這將為你的應用設定預設主題,並採用 res/values 目錄中定義的顏色。建議為此主題使用淺色。
  • AppCompatDelegate.MODE_NIGHT_YES:這會為你的應用設定夜間主題,並採用 res/values-night 目錄中定義的顏色。建議在此主題中使用深色。
  • AppCompatDelegate.MODE_NIGHT_AUTO:這個自動根據一天中的時間和你在 valuesvalues-night 目錄中定義的顏色切換應用程式的顏色。

也可以使用 getDefaultNightMode() 方法獲得當前的夜間模式狀態。例如:

int modeType = AppCompatDelegate.getDefaultNightMode();

但是,請注意,如果你終止應用程式並重新開啟它,主題開關將不會保留。如果你這樣做,主題將切換回 AppCompatDelegate.MODE_NIGHT_AUTO,這是預設值。如果你希望主題開關保持不變,請確保將值儲存在共享首選項中,並在每次應用程式開啟後載入儲存的值。