Android Q 深色主題舉例

来源:https://www.cnblogs.com/xiaxveliang/archive/2020/03/02/12395922.html
-Advertisement-
Play Games

Android Q 深色主題舉例 瞭解深色主題如何應用,第一手資料是 "官方文檔" 與 相應的 "Google Sample" 官方文檔:DayNight — Adding a dark theme to your app: "https://medium.com/androiddevelopers ...


Android Q 深色主題舉例

在這裡插入圖片描述

瞭解深色主題如何應用,第一手資料是 官方文檔 與 相應的 Google Sample

官方文檔:DayNight — Adding a dark theme to your app:
https://medium.com/androiddevelopers/appcompat-v23-2-daynight-d10f90c83e94
官方文檔:Dark theme:
https://developer.android.com/preview/features/darktheme
官方案例:android-DarkTheme
https://github.com/googlearchive/android-DarkTheme

一、深色主題簡介

從Support Library 23.2.0 開始,AppCompat 新增了主題:Theme.AppCompat.DayNight

  • 其允許APP在 深色主題亮色主題 之間切換
  • 可以大幅減少耗電量(OLED顯示屏的設備上,深色主題亮色主題 有更加持久的續航能力)
  • 改善弱視以及對強光敏感的用戶的可視性
  • 讓所有人都可以在光線較暗的環境中更輕鬆地使用設備,從而提升用戶體驗

而從Android Q(10.0)開始,Android設置中新增 深色主題背景 切換按鈕(設置-顯示-深色主題背景)。
在這裡插入圖片描述
因此Android App支持夜間模式,需提上開發日程了...

二、如何使用

2.1 主題設置

APP主題需繼承Theme.AppCompat.DayNightTheme.MaterialComponents.DayNight,以下為代碼舉例。

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
    <!-- Customize your theme here. -->
</style>

2.2 監聽Android Q 系統主題變化

若需要監聽系統主題,例如設置-顯示-深色主題背景 切換動作。

Activity添加android:configChanges="uiMode"

<activity
        android:name=".MyActivity"
        android:configChanges="uiMode" />

Activity中重寫 onConfigurationChanged 方法

/**
 * Android系統設置中 "設置-顯示-深色主題背景" 切換後,回調該方法
 */
Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    int mSysThemeConfig = newConfig.uiMode & Configuration.UI_MODE_NIGHT_MASK;
    switch (mSysThemeConfig) {
        // 亮色主題
        case Configuration.UI_MODE_NIGHT_NO:
            break;
        // 深色主題
        case Configuration.UI_MODE_NIGHT_YES:
            break;
    }
}

2.3 切換App主題

App 中切換應用主題,首先需調用AppCompatDelegate.setDefaultNightMode(int mode)方法,並調用recreate()方法使更改生效。

// 切換到 深色主題
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
// 需調用 recreate() ,從而使更改生效
recreate();

AppCompatDelegate.setDefaultNightMode(int mode)方法有四個參數選項,具體介紹如下:

// 亮色主題
ThemeHelper.Mode.LIGHT
// 暗色主題
ThemeHelper.Mode.DARK
// 跟隨 系統設置(系統深色模式,則深色模式;系統淺色模式,則淺色模式)
AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM
// 省電模式時 深色模式;非省點模式時 淺色模式
AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY

2.4 監聽App主題變化

若需要監聽App的主題變更,可重寫以下方法

/**
 * 回調當前應用的使用主題
 */
@Override
protected void onNightModeChanged(int mode) {
    super.onNightModeChanged(mode);
    switch (mode) {
            // 亮色主題
        case AppCompatDelegate.MODE_NIGHT_NO:
            break;
            // 暗色主題
        case AppCompatDelegate.MODE_NIGHT_YES:
            break;
            // 省電模式時 深色模式;非省點模式時 淺色模式
        case AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY:
            break;
            // 跟隨 系統設置(系統深色模式,則深色模式;系統淺色模式,則淺色模式)
        case AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM:
            break;
    }
}

2.5 自定義背景顏色

  • 新建values-night文件夾
    在這裡插入圖片描述

  • values/styles.xml 拷貝到values-night/styles.xml
    values/styles.xmlvalues-night/styles.xml主題代碼舉例如下

values/styles.xml

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.DayNight">
        <!-- Customize your theme here. -->
    </style>
</resources>

values-night/styles.xml

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <!-- Customize your theme here. -->
    </style>
</resources>
  • values/colors.xml 拷貝到values-night/colors.xml
    更改test_text_bg屬性的顏色值

values/colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">@android:color/white</color>
    <color name="test_layout_bg">@android:color/white</color>
    <color name="test_text">@android:color/black</color>
    <color name="test_text_bg">#008577</color>
</resources>

values-night/colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">@android:color/black</color>
    <color name="test_layout_bg">@android:color/black</color>
    <color name="test_text">@android:color/white</color>
    <color name="test_text_bg">#D81B60</color>
</resources>

三、OK 完事大吉

案例源碼下載地址:
https://github.com/AndroidAppCodeDemo/Android_Dark_Test

在這裡插入圖片描述

在這裡插入圖片描述

========== THE END ==========

wx_gzh.jpg


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • HashMap源碼來自:android 25/java/util/HashMap 一、構造方法 下麵通過跟中源碼查看: table數組初始化 介紹put(K key, V value)方法前,先簡單介紹table數組初始化 ps: 這裡預設初始化了一個數組容量為16的table數組,其中關於roun ...
  • 我們在用MAT(Memory Analyzer Tool)分析Android記憶體時,會發現大量的bitmap對象占了記憶體使用。但是很難定位究竟是哪張圖片占用了記憶體,這裡介紹一種查看bitmap的方法。 MAT、GIMP下載 MAT http://www.eclipse.org/mat/downloa ...
  • SparseArray源碼來自:android 25/java/util/SparseArray ArrayMap源碼來自:25.3.1/support compat 25.3.1/android/android.support.v4.util.ArrayMap 一、SparseArray實現源碼學 ...
  • 英文原文地址 "Memory optimization for feeds on Android" 讀後感 在Java中HashSet只能存放繼承自Objcet的對象,這中情況下“基本數據類型”轉化為繼承自Object的( 、`Long`等)會產生很多中間Object對象,占用過多的記憶體,從而引發垃 ...
  • 效果圖 實現源碼(已上傳我的GitHub): "https://github.com/xiaxveliang/GL_AUDIO_VIDEO_RECODE" 參考: "http://bigflake.com/mediacodec/EncodeAndMuxTest.java.txt" 對於以上代碼,我做 ...
  • obj文件是3D模型文件格式。由Alias|Wavefront公司為3D建模和動畫軟體"Advanced Visualizer"開發的一種標準,適合用於3D軟體模型之間的互導,也可以通過Maya讀寫。 + 只支持模型三角面數據和材質信息,無動畫功能支持; + 其中幾何信息由.obj文件提供,材質信息 ...
  • Mac下Jenkins Android打包 一、安裝tomcat a、下載tomcat http://tomcat.apache.org/ 下載完成後解壓到: b、啟動tomcat: c、驗證 二、安裝Jenkins a、下載 jenkins.war https://jenkins.io/index ...
  • 偶然發現 ,僅僅一個Java文件,可在嵌入式設備(例:Android手機)中啟動一個本地伺服器,接收客戶端本地部分請求。 認真學習了其源碼實現,這裡按照我的學習順序寫了一篇簡單的文章(算是學習筆記吧): + 瞭解官方描述 + 寫個Demo使用一下(Android中本地代理,播放Sdcard中的m3u ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...