欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android深色模式適配適配過(guò)程詳解

 更新時(shí)間:2023年04月07日 10:54:17   作者:tracydragonlxy  
這篇文章主要介紹了Android深色模式適配適配過(guò)程,深色模式其實(shí)就是我們經(jīng)常講到的夜間模式,與白天模式我們需要的屏幕高亮不同,晚上更加需要的是柔和的光,有助于減少手機(jī)對(duì)眼睛的傷害

Android 深色模式適配

深色主題背景

Android 10 (API 級(jí)別 29) 及更高版本中提供深色主題背景。深色主題背景具有諸多優(yōu)勢(shì):

  • 可大幅減少耗電量(具體取決于設(shè)備的屏幕技術(shù))。
  • 為弱視以及對(duì)強(qiáng)光敏感的用戶提高可視性。
  • 讓所有人都可以在光線較暗的環(huán)境中更輕松地使用設(shè)備。

深色主題背景同時(shí)適用于 Android 系統(tǒng)界面和在設(shè)備上運(yùn)行的應(yīng)用。

在應(yīng)用中支持深色主題背景

如要支持深色主題背景,必須將應(yīng)用的主題背景(通常可在 res/values/styles.xml 中找到)設(shè)置為繼承 DayNight 主題背景:

<style name="AppTheme" parent="Theme.AppCompat.DayNight">

或者使用 MaterialComponent 的深色主題背景:

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">

這會(huì)將應(yīng)用的主要主題背景與系統(tǒng)控制的夜間模式標(biāo)記相關(guān)聯(lián),并將應(yīng)用的默認(rèn)主題背景設(shè)置為深色主題背景(如果已啟用)。

主題背景和樣式

主題背景和樣式應(yīng)避免使用旨在于淺色主題背景下使用的硬編碼顏色或圖標(biāo)。應(yīng)改用主題背景屬性(首選)或適合在夜間使用的資源。

以下是需要了解的兩個(gè)最重要的主題背景屬性:

  • ?android:attr/textColorPrimary 這是一種通用型文本顏色。它在淺色主題背景下接近于黑色,在深色主題背景下接近于白色。該顏色包含一個(gè)停用狀態(tài)。
  • ?attr/colorControlNormal 一種通用圖標(biāo)顏色。該顏色包含一個(gè)停用狀態(tài)。

Force Dark

Android 10 提供 Force Dark 功能。此功能可讓開發(fā)者快速實(shí)現(xiàn)深色主題背景,而無(wú)需明確設(shè)置 DayNight 主題背景。

如果應(yīng)用采用淺色主題背景,則 Force Dark 會(huì)分析應(yīng)用的每個(gè)視圖,并在相應(yīng)視圖在屏幕上顯示之前,自動(dòng)應(yīng)用深色主題背景。有些開發(fā)者會(huì)混合使用 Force Dark 和本機(jī)實(shí)現(xiàn),以縮短實(shí)現(xiàn)深色主題背景所需的時(shí)間。

如果應(yīng)用選擇啟用 Force Dark,可以在其主題背景中設(shè)置 android:forceDarkAllowed="true"。此屬性會(huì)在所有系統(tǒng)及 AndroidX 提供的淺色主題背景(例如 Theme.Material.Light)上設(shè)置。

<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="android:colorPrimary">@color/colorPrimary</item>
        <item name="android:colorAccent">@color/colorAccent</item>
        <item name="android:background">@color/colorPrimary</item>
        <item name="windowNoTitle">true</item>
		<!-- 啟用 Force Dark -->
		<item name="android:forceDarkAllowed">true</item>
    </style>
</resources>

如果應(yīng)用使用深色主題背景(例如Theme.Material),則系統(tǒng)不會(huì)應(yīng)用 Force Dark。同樣,如果應(yīng)用的主題背景繼承自 DayNight 主題背景,則系統(tǒng)不會(huì)應(yīng)用 Force Dark,因?yàn)闀?huì)自動(dòng)切換主題背景。

在視圖上停用 Force Dark

您可以通過(guò) android:forceDarkAllowed 布局屬性或 setForceDarkAllowed() 在特定視圖上控制 Force Dark。

Android 10以上

創(chuàng)建項(xiàng)目SDK選擇API29: Android 10以上,res目錄下會(huì)分別創(chuàng)建淺色和深色的主題樣式。

其中values/themes.xml存放淺色模式主題,values-night/themes.xml存放深色模式主題。

如要切換主題背景,可以調(diào)用 AppCompatDelegate.setDefaultNightMode()。

配置變更

當(dāng)應(yīng)用的主題背景發(fā)生更改(無(wú)論是通過(guò)系統(tǒng)設(shè)置還是 AppCompat)時(shí),會(huì)觸發(fā) uiMode 配置變更。這意味著系統(tǒng)會(huì)自動(dòng)重新創(chuàng)建 Activity。

在某些情況下,可能希望應(yīng)用處理配置變更。例如,可能希望延遲配置變更時(shí)間,因?yàn)樵O(shè)備正在播放視頻。

應(yīng)用可以聲明,每個(gè) Activity 都可以處理 uiMode 配置變更,以自行處理深色主題背景的實(shí)現(xiàn):

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

當(dāng)某個(gè) Activity 聲明它會(huì)處理配置變更時(shí),系統(tǒng)會(huì)在出現(xiàn)主題背景變更時(shí)調(diào)用該 Activity 的 onConfigurationChanged() 方法。

如要檢查當(dāng)前采用的是哪種主題背景,應(yīng)用可以運(yùn)行如下代碼:

@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    int currentNightMode = newConfig.uiMode & Configuration.UI_MODE_NIGHT_MASK;
    switch (currentNightMode) {
        case Configuration.UI_MODE_NIGHT_NO:
            // Night mode is not active, we're using the light theme
            Log.i(TAG, "onConfigurationChanged: light");
            break;
        case Configuration.UI_MODE_NIGHT_YES:
            // Night mode is active, we're using dark theme
            Log.i(TAG, "onConfigurationChanged: dark");
            break;
        default:
            break;
    }
}

到此這篇關(guān)于Android深色模式適配適配過(guò)程詳解的文章就介紹到這了,更多相關(guān)Android深色模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論