Android按钮文本颜色selector如何实现日间/夜间模式分设颜色值
实现方法
核心思路是通过自定义主题属性实现日夜模式的自动适配,无需额外写业务代码判断当前模式,系统会自动匹配对应取值,操作步骤如下:
前提:确保你的App使用的是支持日夜切换的
DayNight系列主题,否则系统不会自动加载夜间配置。
步骤1:定义自定义属性
在res/values/attrs.xml(如果文件不存在可直接新建)中添加自定义颜色属性:
<?xml version="1.0" encoding="utf-8"?> <resources> <attr name="buttonTextPrimaryColor" format="color|reference" /> </resources>
步骤2:在不同主题下给自定义属性赋值
- 打开日间主题配置文件(通常为
res/values/themes.xml),在你的App默认主题节点下添加属性赋值:<style name="Theme.你的应用名称" parent="Theme.MaterialComponents.DayNight.NoActionBar"> <!-- 保留原有其他主题配置 --> <item name="buttonTextPrimaryColor">?android:attr/colorPrimary</item> </style> - 打开夜间主题配置文件(通常为
res/values-night/themes.xml),在同名主题节点下赋值夜间要使用的颜色:<style name="Theme.你的应用名称" parent="Theme.MaterialComponents.DayNight.NoActionBar"> <!-- 保留原有其他主题配置 --> <item name="buttonTextPrimaryColor">?android:attr/textColorPrimary</item> </style>
步骤3:修改原有selector文件
把selector中原来的颜色引用替换为自定义属性即可:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="?attr/buttonTextPrimaryColor" android:state_enabled="true" /> <item android:alpha="0.38" android:color="?attr/buttonTextPrimaryColor" /> </selector>
可选简化方案
如果不想自定义属性,也可以直接写两个同名selector文件,分别放在不同资源目录下:
res/color/btn_text_selector.xml(日间):颜色使用?android:attr/colorPrimaryres/color-night/btn_text_selector.xml(夜间):颜色使用?android:attr/textColorPrimary
系统同样会自动根据当前模式加载对应目录下的selector,适合改动频率低的场景。
内容的提问来源于stack exchange,提问作者Jeff L
相关产品推荐
相关产品推荐

