Android:如何为暗模式切换主题?

标签 android android-theme android-dark-theme android-darkmode

从 Android 10 开始,您可以在暗模式和默认亮模式之间切换。我还没有对此进行任何更深入的研究,因为这是一个新话题。暗模式颜色切换是否由操作系统自动切换,或者如果开启暗模式,是否有办法告诉我的应用程序切换不同的应用程序主题?某些 Android 9 设备也可以使用暗模式。

因为我使用自定义参数制作了自定义深色主题,并为资源中的每种颜色设置了深色(使用 attrs.xml 中的自定义属性并在 styles.xml 中将特定颜色资源应用于主题内)。同样,它适用于我的应用程序的不同配色方案(例如蓝色、红色、绿色)。这样我就可以知道哪种颜色将用于我的应用程序而不是系统中的不同 View 。

我唯一需要的是检测系统中的暗模式是否打开/关闭。我可以强制用户在应用设置(自定义设置)中打开暗模式,但主题可能会受到系统暗模式(在电话设置中打开)的影响。

最佳答案

来自 official documentations :

In order to support Dark theme, you must set your app's theme (usually found in res/values/styles.xml) to inherit from a DayNight theme:


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

You can also use MaterialComponents' dark theming:


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

This ties the app's main theme to the system-controlled night mode flags and gives the app a default Dark theme (when it is enabled).



这意味着如果您使用 DayNight 主题,操作系统本身会处理应用程序主题。如果您想强制应用使用深色主题,请检查 this文档。

更新:

检测设备主题:
switch (getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) {
    case Configuration.UI_MODE_NIGHT_YES:
        …
        break;
    case Configuration.UI_MODE_NIGHT_NO:
        …
        break; 
}

关于Android:如何为暗模式切换主题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59279914/

相关文章:

android - styles.xml 和 theme.xml 有什么区别

android - 在 Ionic 中禁用黑暗主题

android - Linphone SDK 不构建 android

android - 如何从 Android 模拟器卸载现有包

android - 禁用标签之间的滑动

Android:通过样式在alertdialog中消息字体大小

java - Android - 一个 Activity 中有两个 setViewContent - 一个在 xml 中,一个在 java 中

具有全息灯主题的 Android 对话框 Activity

java - 设置列表首选项后,为什么我的应用不会更改为深色模式 (Android Q)?

android - Android Q 中的深色主题配置更改