[Android] 夜間模式

以往要實作 Android App 的夜間模式,得要自行製作不同的 Style Theme 切換。然而從 Android Support Library 23.2 版本開始,增加了 AppCompat DayNight Theme 功能,事先設置好 白天 和 夜晚 主題。需注意這裡的 DayNight Theme 只支援 Android 4.0(API 14)以上的版本。

使用方式如下:
首先將 styles.xml 的 Theme 改為 DayNight 主題
styles.xml
<style name="AppTheme.DayNight.NoActionBar">
   .....
</style>

DayNight 主題有四種模式:
  • MODE_NIGHT_NO:使用白天(白色)主題
  • MODE_NIGHT_YES:使用夜間(暗黑)主題
  • MODE_NIGHT_AUTO:根據一天當中的時間自動切換
  • MODE_NIGHT_FOLLOW_SYSTEM:遵循系統的設置,基本上是以 MODE_NIGHT_NO 為主
然後,在程式中可以透過 AppCompatDelegate.setDefaultNightMode 以及 getDelegate().setLocalNightMode() 來改變
  • AppCompatDelegate.setDefaultNightMode 是對整個 App 中主題為 DayNight Theme 有效
  • getDelegate().setLocalNightMode() 只對於設定的地方生效,用於重新設定預設值
最後,用 recurate() 來通知頁面更新
if (Config.Day) {
    //白天
    AppCompatDelegate.setDefaultNightMode(
              AppCompatDelegate.MODE_NIGHT_NO);

} else {
    //夜間
    AppCompatDelegate.setDefaultNightMode(
              AppCompatDelegate.MODE_NIGHT_YES);
}
recreate();
要注意的是,因為 Toolbar 有自己的 Theme,而 WebView 不能使用 Theme,如果畫面上的 Toolbar 和 WebView 需要套用夜間模式,要另外加工處理,除此之外,其他元件都會自動套用日間/夜間主題。

以下是實作之效果
日間模式:

夜間模式:





相關文章

如何將電腦畫面經由 Chromecast 投放到電視螢幕上

Chrome 的檔案續傳功能

隱私權政策產生器 Privacy Policy Generator

使用 Vysor 在電腦上控制 Android 裝置