如何通过XML设置跟随设备主题(深色/浅色)的Android View颜色
Android 适配设备主题的原生颜色值用法
在Android中,要实现跟随设备深色/浅色主题自动切换的颜色,无需自定义两套资源,直接使用系统提供的主题感知型属性即可,替代你之前用的固定dark/light颜色资源。
核心用法:引用系统主题属性
系统从API 29(Android 10)开始提供了一系列自动适配主题的颜色属性,直接通过?android:attr/xxx的方式引用:
文本颜色类:
- 主文本(对应你之前的
primary_text_dark):android:textColor="?android:attr/textColorPrimary" - 次要文本:
android:textColor="?android:attr/textColorSecondary" - 提示文本/占位符文本:
android:textColor="?android:attr/textColorHint"
这些属性会自动根据当前设备主题切换颜色——浅色主题下显示深色文本,深色主题下显示浅色文本,完全符合系统设计规范。
- 主文本(对应你之前的
背景色类:
如果需要适配主题的背景,同样可以用系统属性:- 页面窗口背景:
android:background="?android:attr/windowBackground" - 卡片背景:
android:background="?android:attr/cardBackgroundColor"
- 页面窗口背景:
低版本兼容说明
如果你的应用最低兼容版本低于API 29,可以通过以下方式兼容:
- 在
res目录下创建values-night文件夹 - 在
values/colors.xml和values-night/colors.xml中分别定义对应浅色/深色主题的颜色 - 在主题中自定义属性,再在布局中引用自己的属性
但优先推荐使用系统原生的?android:attr/xxx属性,既省心又能保证和系统主题风格统一。
内容的提问来源于stack exchange,提问作者Marcelo Idemax
相关产品推荐
相关产品推荐

