前幾天剛剛發佈的Android Support Library 23.2,增加了夜間主題,實在是太令人興奮了,有了這個主題再做夜間模式功能實在是太簡單了。下面我就來介紹一下。
該夜間主題是Theme,AppCompat.DayNight,與它相關的還有
DayNight.NoActionBar,DayNight.DarkActionBar,DayNight.Dialog.而且其主題向下兼容到了API14。這個主題可以讓應用程序很輕鬆的支持白天和夜晚的主題
具體怎麼做呢,看下面
第一步
應該在AndroidManifest.xml中設置theme爲Theme,AppCompat.DayNight
第二步
需要重寫AppCompatDelegate中的值也就是AppCompatDelegate.setDefaultNightMode()或者或通過getDelegate()得到AppCompatDelegate對象,並使用setLocalNightMode()來設置當前的Activity或Dialog的主題
該模式有三種
1. AppCompatDelegate.MODE_NIGHT_AUTO,他會時刻知道你最後的位置和 時間(如果您的應用程序已開啓位置權限)用於白天和黑夜之間自動切換的 依據
2. AppCompatDelegate.MODE_NIGHT_NO強制設定了從不使用夜晚主題。
3. AppCompatDelegate.MODE_NIGHT_YES則強制設定了一直使用夜晚主題。
例如
<span style="font-size:24px;">getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_YES);</span>
這句代碼一定要寫在setContentView()之前纔有效,因爲這是設置主題的
第三步
把白天和夜晚的資源分開。例如values,values-night.
把夜晚主題的color等資源放在values-night中,程序在運行時就會自動調用
不足之處:
Android Support Library 23.2發佈的這個夜間模式貌似只適用於多套資源的情況,如果只有1套資源,特別是圖片,我們需要獲取當前是白天還是夜間,對圖片透明度進行處理,但是API提供的AppCompatDelegate類中並沒有獲取當前是白天還是夜間的方法,只有獲取模式的方法。所以大家還是得根據項目需求而定