您好,登錄后才能下訂單哦!
本篇內容主要講解“Android深色模式適配的方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Android深色模式適配的方法是什么”吧!
Android 10 (API 級別 29) 及更高版本中提供深色主題背景。深色主題背景具有諸多優勢:
可大幅減少耗電量(具體取決于設備的屏幕技術)。
為弱視以及對強光敏感的用戶提高可視性。
讓所有人都可以在光線較暗的環境中更輕松地使用設備。
深色主題背景同時適用于 Android 系統界面和在設備上運行的應用。
如要支持深色主題背景,必須將應用的主題背景(通常可在 res/values/styles.xml
中找到)設置為繼承 DayNight
主題背景:
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
或者使用 MaterialComponent
的深色主題背景:
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
這會將應用的主要主題背景與系統控制的夜間模式標記相關聯,并將應用的默認主題背景設置為深色主題背景(如果已啟用)。
主題背景和樣式應避免使用旨在于淺色主題背景下使用的硬編碼顏色或圖標。應改用主題背景屬性(首選)或適合在夜間使用的資源。
以下是需要了解的兩個最重要的主題背景屬性:
?android:attr/textColorPrimary
這是一種通用型文本顏色。它在淺色主題背景下接近于黑色,在深色主題背景下接近于白色。該顏色包含一個停用狀態。
?attr/colorControlNormal
一種通用圖標顏色。該顏色包含一個停用狀態。
Android 10 提供 Force Dark 功能。此功能可讓開發者快速實現深色主題背景,而無需明確設置 DayNight 主題背景。
如果應用采用淺色主題背景,則 Force Dark 會分析應用的每個視圖,并在相應視圖在屏幕上顯示之前,自動應用深色主題背景。有些開發者會混合使用 Force Dark 和本機實現,以縮短實現深色主題背景所需的時間。
如果應用選擇啟用 Force Dark,可以在其主題背景中設置 android:forceDarkAllowed="true"
。此屬性會在所有系統及 AndroidX 提供的淺色主題背景(例如 Theme.Material.Light)上設置。
<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>
如果應用使用深色主題背景(例如Theme.Material),則系統不會應用 Force Dark。同樣,如果應用的主題背景繼承自 DayNight 主題背景,則系統不會應用 Force Dark,因為會自動切換主題背景。
您可以通過 android:forceDarkAllowed
布局屬性或 setForceDarkAllowed()
在特定視圖上控制 Force Dark。
創建項目SDK選擇API29: Android 10以上,res目錄下會分別創建淺色和深色的主題樣式。
其中values/themes.xml
存放淺色模式主題,values-night/themes.xml
存放深色模式主題。
如要切換主題背景,可以調用 AppCompatDelegate.setDefaultNightMode()
。
當應用的主題背景發生更改(無論是通過系統設置還是 AppCompat)時,會觸發 uiMode 配置變更。這意味著系統會自動重新創建 Activity。
在某些情況下,可能希望應用處理配置變更。例如,可能希望延遲配置變更時間,因為設備正在播放視頻。
應用可以聲明,每個 Activity 都可以處理 uiMode 配置變更,以自行處理深色主題背景的實現:
<activity android:name=".MyActivity" android:configChanges="uiMode" />
當某個 Activity 聲明它會處理配置變更時,系統會在出現主題背景變更時調用該 Activity 的 onConfigurationChanged()
方法。
如要檢查當前采用的是哪種主題背景,應用可以運行如下代碼:
@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; } }
到此,相信大家對“Android深色模式適配的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。