Android實現(xiàn)夜間模式(基于Support Library)

1:在build.gradle里面引入Support Library包:

compile('com.android.support:appcompat-v7:26.1.0') { exclude module: 'support-v4'}

2:在styles文件里面自定義白天和夜晚兩種主題,
首先 新建兩個文件夾,分別為:values-night和drawable-night,目錄結(jié)構(gòu)如下:


K`30([TS0RW]AILC1E0X%8B.png

2.1:白天主題管宵,在res/values/styles文件里面咨察,例如:

 <style name="CarnocTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">@color/primary</item>
        <item name="colorPrimaryDark">@color/primary_dark</item>
        <item name="colorAccent">@color/accent</item>
  </style>
  <style name="CarnocTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

2.2:夜晚主題港粱,在res/values-night/styles定義洞翩,例如:

<style name="CarnocTheme" parent="Theme.AppCompat.DayNight">
        <item name="colorPrimary">@color/primary</item>
        <item name="colorPrimaryDark">@color/primary_dark</item>
        <item name="colorAccent">@color/accent</item>
 </style>

此處的顏色均在color.xml文件定義的,因為有兩種顯示方式沮翔,所以可能存在日陨帆、夜兩種主題下,兩份顏色定義采蚀,具體看第三步介紹疲牵。此處只是實例,可不必粘貼在代碼里面榆鼠,在第三步統(tǒng)一操作纲爸;

   <color name="primary">#2196F3</color>
   <color name="primary_dark">#1976D2</color>
   <color name="accent">@color/primary</color>

三種顏色代表的意思如下圖所示:


20161019114428989.png

3:定義顏色、圖片妆够、點擊效果等兩種效果识啦,一個為夜間模式下负蚊,另一個為正常模式下的;
3.1:顏色颓哮,普通模式下的顏色和通常顏色定義一樣家妆,定義在res/values/colors.xml文件里面,如下:

   <color name="primary">#2196F3</color>
    <color name="primary_dark">#1976D2</color>
    <color name="accent">@color/primary</color>
    <color name="text_color_topleft">#333333</color>
    <color name="text_color_topcenter">#4e4e4e</color>
    <color name="line_color_top">#d8d8d8</color>
    <color name="text_color_noimg">#aaaaaa</color>
    <color name="listview_item_color1">#FFFFFF</color>
    <color name="listview_item_color2">#eeeeee</color>

夜間模式下的顏色定義在res/values-night/color.xml文件里面冕茅,例如:

 <color name="primary">#2196F3</color>
    <color name="primary_dark">#191A1E</color>
    <color name="accent">@color/primary</color>
    <color name="frament_usercenter_bgcolor">#191A1E</color>
    <color name="topbar_bg">#191A1E</color>
    <color name="text_color_topleft">#8E8F91</color>
    <color name="text_color_topcenter">#8E8F91</color>
    <color name="line_color_top">#07080A</color>
    <color name="listview_item_color1">#07080A</color>
    <color name="listview_item_color2">#191A1E</color>

由于前三個顏色在主題里面有用到伤极,必須定義,name也必須跟之前的一模一樣姨伤,顏色可以根據(jù)項目需求對顏色進行更改哨坪;其他的顏色,按照項目實際要求選擇行定義乍楚,name和顏色都可以自定義的当编;
3.2:圖片,圖片很簡單徒溪,只要將頁面模式下的圖片放到drawable-night文件夾下即可忿偷,注意必須和普通模式下的圖片同名;
3.3:對于點擊事件词渤,由于夜間模式下牵舱,點擊效果展示的顏色也和普通模式下有區(qū)別串绩,所以需要定義兩份缺虐,將普通的點擊效果文件復(fù)制到drawable-night文件夾下,例如我有一份普通模式下的文件點擊效果礁凡,listview_item_selector.xml高氮,代碼如下:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/listview_item_color1" android:state_pressed="false"/>
    <item android:drawable="@color/listview_item_color2" android:state_pressed="true"/>

</selector>

無論是drawable/listview_item_selector.xml文件還是drawable-night/listview_item_selector.xml 代碼、文件名都是一樣的顷牌,但是具體里面的item定義文件的顏色剪芍,需要在res/values/colors.xml以及res/values-night/color.xml定義兩份.具體代碼,已經(jīng)在3.1里面講過了窟蓝。

到這里罪裹,基本的資源文件定義,主題定義运挫,已經(jīng)結(jié)束了状共,接下來就是如何應(yīng)用到項目里面:
4:應(yīng)用定義的資源、主題到項目
4.1:AndroidManifest.xml文件應(yīng)用主題谁帕,直接在<application>里面進行屬性配置即可:

 <application
       ......
        android:theme="@style/CarnocTheme.NoActionBar"
       .........
>
..........
..........
 </application>

4.2:在application的onCreat()方法里面初始化主題峡继,這里的CacheUINightMode只是一個本地自定義的存儲文件SharedPreferences,用來緩存用戶之前選擇的主題匈挖,true代表夜間碾牌;

if (CacheUINightMode.getData(this)) {
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
        } else{
          AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
        }

具體設(shè)置頁面康愤,按鈕在點擊切換模式時,代碼如下舶吗,已解決卡頓問題:

slipBtnNight.setOnCheckedChangeListener(new SwitchView.OnCheckedChangeListener()
        {
            @Override
            public void onCheckedChanged(boolean isChecked)
            {
                if (isChecked && !CacheUINightMode.getData(UserCenter_SettingActivity.this))
                {
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
                    CacheUINightMode.saveData(UserCenter_SettingActivity.this, true);
                    startActivity(new Intent(UserCenter_SettingActivity.this,UserCenter_SettingActivity.class));
                    overridePendingTransition(R.anim.anim_animo_alph_open,R.anim.anim_animo_alph_close);
                    finish();
                }
                else if (CacheUINightMode.getData(UserCenter_SettingActivity.this) && !isChecked)
                {
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
                    CacheUINightMode.saveData(UserCenter_SettingActivity.this, false);
                    startActivity(new Intent(UserCenter_SettingActivity.this,UserCenter_SettingActivity.class));
                    overridePendingTransition(R.anim.anim_animo_alph_open,R.anim.anim_animo_alph_close);
                    finish();
                }
            }
        });

動畫效果代碼如下:
anim_animo_alph_close.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha
        android:fromAlpha="1.0"
        android:toAlpha="0.1"
        android:duration="800"
        android:interpolator="@android:anim/accelerate_interpolator"/>
</set>

anim_animo_alph_open.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha
        android:fromAlpha="0.1"
        android:toAlpha="1.0"
        android:duration="800"
        android:interpolator="@android:anim/accelerate_interpolator"/>
</set>

到這就徹底結(jié)束了征冷,啦啦啦啦。誓琼。资盅。第一次寫技術(shù)文章,好緊張踊赠。呵扛。。筐带。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末今穿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子伦籍,更是在濱河造成了極大的恐慌蓝晒,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帖鸦,死亡現(xiàn)場離奇詭異芝薇,居然都是意外死亡,警方通過查閱死者的電腦和手機作儿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門洛二,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人攻锰,你說我怎么就攤上這事晾嘶。” “怎么了娶吞?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵垒迂,是天一觀的道長。 經(jīng)常有香客問我妒蛇,道長机断,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任绣夺,我火速辦了婚禮吏奸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘乐导。我一直安慰自己苦丁,他們只是感情好,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布物臂。 她就那樣靜靜地躺著旺拉,像睡著了一般产上。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蛾狗,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天晋涣,我揣著相機與錄音,去河邊找鬼沉桌。 笑死谢鹊,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的留凭。 我是一名探鬼主播佃扼,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蔼夜!你這毒婦竟也來了兼耀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤求冷,失蹤者是張志新(化名)和其女友劉穎瘤运,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匠题,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡拯坟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了韭山。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片郁季。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖掠哥,靈堂內(nèi)的尸體忽然破棺而出巩踏,到底是詐尸還是另有隱情秃诵,我是刑警寧澤续搀,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站菠净,受9級特大地震影響禁舷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜毅往,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一牵咙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧攀唯,春花似錦洁桌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谱轨。三九已至,卻和暖如春吠谢,著一層夾襖步出監(jiān)牢的瞬間土童,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工工坊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留献汗,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓王污,卻偏偏與公主長得像罢吃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子昭齐,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,745評論 25 707
  • 前言 隨著一款A(yù)PP應(yīng)用功能的不斷完善刃麸,用戶群體的不斷增多,APP的更新也就不僅僅局限于功能需求司浪,如何做好良好的用...
    采蘑菇的里奧馬閱讀 27,844評論 43 146
  • 夜幕降臨泊业,他走在馬路上,回想著今天發(fā)生的一切啊易,他不敢相信事情就這樣發(fā)生了吁伺。他最終還是決定撥打那個電話,掏出手機租谈,解...
    章魚老王閱讀 9,822評論 9 49
  • 在中國篮奄,每年的4月1號除了是愚人節(jié)之外,還是哥哥張國榮的忌日割去,而哥哥張國榮就是因為抑郁癥才去世的窟却,今年前不久一位偶...
    李說閱讀 150評論 0 1
  • 讀過很多故事,依舊寫不出故事會呻逆。 2015年7月28日夸赫,我光榮加入千字計劃群,并開始按約履行每一項規(guī)定咖城。 我向來是...
    9號劉俊利閱讀 314評論 0 1