中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行Android中夜間模式開發淺析

發布時間:2021-12-18 17:57:33 來源:億速云 閱讀:261 作者:柒染 欄目:大數據

本篇文章為大家展示了如何進行Android中夜間模式開發淺析,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

前言

Android的夜間模式主要主用于閱讀方面,在QQ,微信讀書,新聞閱讀類一般會有相應的功能,下面主要介紹整體APP的夜間模式以及webview中夜間模式的實現。

效果圖展示

如何進行Android中夜間模式開發淺析  如何進行Android中夜間模式開發淺析


功能實現簡介

APP的夜間模式有兩種方式:

1、通過切換theme來實現夜間模式。2、通過修改uiMode來切換夜間模式。

修改uimode是修改Configuration,這種主題切換只限于黑白模式,沒有其他模式,不需要大量定義主題,即本文介紹的內容。

webview這個是通過改變HTML代碼來實現的,我們一個一個的來講。

application夜間模式代碼詳解

首先記載依賴:compile 'com.android.support:appcompat-v7:24.0.0',然后Activity須繼承AppCompatActivity。這兩個應該是硬性要求哦,我在網上查到的。

關于xml的一些準備工作

采用這種方法切換夜間模式,其實就是動態變換xml的背景色。

<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolBar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="@color/colorPrimary"
    android:fitsSystemWindows="true"
    app:navigationIcon="@drawable/ic_actionbar_menu"
    app:titleTextColor="@color/textColorPrimary"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
</android.support.v7.widget.Toolbar>

這是toolbar的布局文件,主要看顏色的處理,這里邊顏色一定要引用color資源文件下的顏色。注意哦,一定不可以直接寫顏色代碼,一定不行!!!我在初學android的時候,基本不管這些封裝的,剛開始就是覺得費勁,直接把顏色代碼寫上不就好了,#FFF或者其他顏色代碼,簡單明了。這次我才發現看來封裝是真的有用。看一下color文件吧。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#0099FF</color>
    <color name="colorPrimaryDark">#4b4b58</color>
    <color name="colorAccent">#FF4081</color>
    <color name="colorLightGray">#E0E0E0</color>
    <color name="colorWhite">#FFFFFF</color>
    <color name="textColorPrimary">#FFFFFF</color>
    <color name="colorDayWindowBackground">#F3F3F3</color>
    <color name="colorDayPrimary">#00A2ED</color>
    <color name="gray_color">#4b4b58</color>
    <color name="item_bg">#FFFFFF</color>
    <color name="titleTextColor">#FFFFFF</color>
</resources>

注意toolbar用到的colorPrimary以及textColorPrimary,都有在color文件中定義。然后需要注意的是你還需要另外定義一份夜間使用的資源顏色 values—night,放在res文件夾下面如圖


如何進行Android中夜間模式開發淺析


<?xml version="1.0">

注意:values—night下面也有colorPrimary以及textColorPrimary。但是顏色值不一樣,當點擊切換夜間模式的時候,android會自動從values—night下面取值
還有一點需要注意:APP的主題一定要是DayNight下的

 <style name="AppTheme" parent="Theme.AppCompat.DayNight.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="toolbarColor">@color/colorPrimary</item>

    </style>
 Java代碼實現
 public boolean onMenuItemClick(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_switch_model:
                int mode = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;

                if (mode == Configuration.UI_MODE_NIGHT_YES) {
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
                } else {
                   
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
                }
              
                recreate();

        }
        return false;
    }

這里我是在菜單欄中實現切換的,菜單欄不必詳說。主要是看點擊事件里的代碼詳解:
AppCompatDelegate.setDefaultNightMode(int mode);用于適配全局主題
model它有四個可選值,分別是:
MODE_NIGHT_NO: 使用亮色(light)主題,不使用夜間模式
MODE_NIGHT_YES:使用暗色(dark)主題,使用夜間模式
MODE_NIGHT_AUTO:根據當前時間自動切換 亮色(light)/暗色(dark)主題
MODE_NIGHT_FOLLOW_SYSTEM(默認選項):設置為跟隨系統,通常為 MODE_NIGHT_NO
這里我們主要采用YES和NO兩種主題, int mode = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;用于獲取現在的主題。

webview中的夜間模式

我這個方法不通用,但是理念是一樣的,都需要注入css代碼,改變HTML中的樣式,因為HTML的整體樣式都歸于css管理。這次webview從json數據中獲取了整體HTML的代碼,通過setdata方法加載,詳細用法看鏈接http://www.jianshu.com/p/7d93d72390ec
這次我在css代碼后面加上了字符串"</head><body class="night">",代碼如下:

public static String createHtmlData(String html, List<String> cssList, List<String> jsList) {
        final String css = HtmlUtil.createCssTag(cssList)+ "</head><body class=\"night\">";
        final String js = HtmlUtil.createJsTag(jsList);
        Log.i("CSS123",css);
        Log.i("CSS125",html);
        Log.i("CSS124",js);
        return css.concat(HIDE_HEADER_STYLE).concat(html).concat(js);
    }


上述內容就是如何進行Android中夜間模式開發淺析,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳原县| 蒲江县| 蓬莱市| 洞口县| 黔江区| 河源市| 山阴县| 新营市| 资兴市| 扬中市| 河北省| 个旧市| 泗洪县| 冕宁县| 温宿县| 中阳县| 章丘市| 邹城市| 花莲市| 白河县| 道真| 鹿泉市| 绥滨县| 泸西县| 山阳县| 黑水县| 宁陵县| 柳州市| 万安县| 商水县| 翁牛特旗| 伽师县| 射洪县| 哈尔滨市| 灵丘县| 南川市| 吉林市| 迁安市| 汝州市| 报价| 万源市|