Android Material Design系列之夜間模式

今天我們講講夜間模式的實(shí)現(xiàn),這篇文章的名字應(yīng)該叫:《Android Material Design系列之夜間模式》。在Android 5.0 之后,實(shí)現(xiàn)夜間模式并非很難了,支持的5.0庫提供了非常簡單的實(shí)現(xiàn)方式。不信,你就往下看。

首先說,這種方式有它的局限性,只能是兩種模式,夜間和白天的黑白兩種模式,由于其局限性,所以實(shí)現(xiàn)就非常簡單。講之前,咱先看看效果圖吧。

效果圖

image
image

實(shí)現(xiàn)真的是非常簡單,就如下幾步,來一起來看看。

實(shí)現(xiàn)依賴

compile 'com.android.support:appcompat-v7:23.4.0'

配置對應(yīng)的主題模式

上篇文章我們補(bǔ)充了主題模式的講解,對于一些主題樣式進(jìn)行的相應(yīng)的說明,我也說過,到這里我們就有可能用到。

白天模式

對于白天模式的主題樣式和顏色,我們就是按正常的來做就可以了。就是我們平常設(shè)置主題和顏色的地方設(shè)置就行。不同的是我們的主題style樣式需要繼承的是DayNight主題。
如下:

<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.NoActionBar">
  <!-- Customize your theme here. -->
  <item name="colorPrimary">@color/colorPrimary</item>
  <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
  <item name="colorAccent">@color/colorAccent</item>
  <item name="android:textColorPrimary">@color/text_color_primary</item>
</style>

<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.DayNight">
  <item name="windowActionBar">false</item>
  <item name="windowNoTitle">true</item>
</style>

重點(diǎn)是這句話:

parent="Theme.AppCompat.DayNight"

夜間模式

對于夜間模式的顏色和主題配置,我們需要建立一個(gè)res下建立一個(gè)values-night文件夾,里面放著夜間主題樣式的color等資源。
colors.xml配置如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#0a0a0a</color>
    <color name="colorPrimaryDark">#000000</color>
    <color name="colorAccent">#fc0404</color>
    <color name="add_bg_color">#FF2ECC71</color>
    <color name="add_selected_color">#51C332</color>
    <color name="white">#ffffff</color>
    <color name="text_color">#7f7f7f</color>
    <color name="navigation_bar_color">#0a0a0a</color>
    <color name="color_control_normal">#f305be</color>
    <color name="text_color_primary">#00ffff</color>
    <color name="navigationview_bg_color">#000000</color>
</resources>

需要注意和說明的是:這里的name的屬性的名字和我們正常情況下的,也就是白天模式下的名字必須一樣,只不過是值不一樣罷了,顏色值白天和夜間的值你們自己配置就可以了。

切換主題

這一步就是改切換主題的調(diào)用了,如下:

isNight = sp.getBoolean("night", false);
if (isNight) {
    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
    sp.edit().putBoolean("night", false).commit();
} else {
    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
    sp.edit().putBoolean("night", true).commit();
}
recreate();

我這里對模式進(jìn)行了保存,先判斷現(xiàn)在處于什么模式,然后點(diǎn)擊的時(shí)候,再根據(jù)現(xiàn)在的模式切換到另一種模式。
重點(diǎn)是這兩行代碼:

//這是設(shè)置成非夜間模式
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
//這是設(shè)置成夜間模式
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);

補(bǔ)充說明

AppCompatDelegate.setDefaultNightMode(int mode);
這里的mode有四個(gè)可選值,分別是:

  • MODE_NIGHT_NO: 使用亮色(light)主題,不使用夜間模式
  • MODE_NIGHT_YES:使用暗色(dark)主題,使用夜間模式
  • MODE_NIGHT_AUTO:根據(jù)當(dāng)前時(shí)間自動(dòng)切換 亮色(light)/暗色(dark)主題
  • MODE_NIGHT_FOLLOW_SYSTEM(默認(rèn)選項(xiàng)):設(shè)置為跟隨系統(tǒng),通常為MODE_NIGHT_NO

到這里關(guān)于夜間模式的切換就講完了,是不是非常簡單?對,就是這么簡單,如果你還不知道這種方式,那就趕緊去試試吧,最近MD系列的閱讀量真的是很低,看來大家都不太喜歡,如果這篇文章的閱讀量低于1500,就暫時(shí)先停一段MD系列的更新,換別的文章更新,給大家換換腦子,寫這個(gè)系列我也有點(diǎn)累了,MD系列后面應(yīng)該講解轉(zhuǎn)場動(dòng)畫和按壓特效了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,981評論 25 709
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點(diǎn)贊按鈕進(jìn)度條TabLayout圖標(biāo)下拉刷新...
    皇小弟閱讀 47,147評論 22 665
  • 博文出處:對于Android日夜間模式實(shí)現(xiàn)的探討,歡迎大家關(guān)注我的博客,謝謝!0x0001====== 關(guān)于 An...
    俞其榮閱讀 10,881評論 16 74
  • 看到手機(jī)來電顯示表姐的名字時(shí),我還在猶豫這電話要不要接。因?yàn)椋ǔ?,這位姐姐打電話給我準(zhǔn)沒好事。猶豫了十秒以...
    小靜_余閱讀 302評論 0 1
  • 哈佛大學(xué)校長陸登庭在“世界著名大學(xué)校長論壇”上說:“如果沒有好奇心和純粹的求知欲為動(dòng)力,就不可能產(chǎn)生那些對人類和社...
    Louise718閱讀 183評論 11 5

友情鏈接更多精彩內(nèi)容