Android Studio中Button selector的item内color配置不生效
核心问题点
- 布局中的Button配置了
android:backgroundTint="#2A56C6"属性,该属性会对android:background绑定的drawable强制叠加色调,优先级高于drawable内部配置的颜色,会直接覆盖你在selector中设置的填充色。 - 自定义的
roundless_button.xml存在语法错误:<solid>节点被放在了<shape>闭合标签外部,系统解析drawable时无法读取到你配置的填充色规则。 - selector的item节点配置冲突:你同时给item设置了
android:drawable="@color/IndBlue"属性,又在item内部嵌套shape定义,item的drawable属性优先级更高,会直接覆盖内部的shape配置,导致shape里的solid规则完全不生效。
修复操作
- 删除Button布局代码中的
android:backgroundTint="#2A56C6"行;如果使用的是Material主题下的MaterialButton,需要额外将该属性设置为@null,否则组件默认的backgroundTint规则依然会覆盖自定义背景色。 - 修正
roundless_button.xml的写法,正确嵌套标签,移除item上冗余的drawable属性,修正后代码如下:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <solid android:color="@color/IndBlue" /> <!-- 圆角、描边等其他shape属性统一写在shape标签内部 --> </shape> </item> </selector>
- 重新编译运行即可看到背景色正常生效,如果需要做按压、禁用等多状态颜色切换,只需要在selector内新增对应状态的item即可,每个item内部嵌套对应的shape配置。
内容的提问来源于stack exchange,提问作者anio
相关产品推荐
相关产品推荐

