Android中Selector内Shape不生效,Checkbox形状未改变如何解决?
问题解决:Checkbox形状不生效的调整方案
核心问题出在你的selector文件写法错误:每个<item>同时指定了android:drawable属性和内部的<shape>标签,这会导致shape的圆角、描边等属性被忽略,只有drawable指定的颜色生效,所以形状没变化。
调整步骤:
- 移除每个item中的
android:drawable属性,把颜色设置到shape的<solid>标签里,让shape的所有属性正常生效 - 确保selector文件命名为
rounded_edges.xml(和布局中引用的一致),放在res/drawable目录下
修改后的完整selector代码:
<?xml version="1.0" encoding="UTF-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false"> <shape> <solid android:color="@color/disableColor" /> <stroke android:width="3dp" android:color="#ffffff" /> <padding android:bottom="1dp" android:left="1dp" android:right="1dp" android:top="1dp" /> <corners android:radius="7dp" /> <!-- 统一设置圆角,写法更简洁 --> </shape> </item> <item android:state_checked="true"> <shape> <solid android:color="@color/Yellow" /> <stroke android:width="3dp" android:color="#ffffff" /> <padding android:bottom="1dp" android:left="1dp" android:right="1dp" android:top="1dp" /> <corners android:radius="7dp" /> </shape> </item> <item android:state_checked="false"> <shape> <solid android:color="@color/Dark_Blue" /> <stroke android:width="3dp" android:color="#ffffff" /> <padding android:bottom="1dp" android:left="1dp" android:right="1dp" android:top="1dp" /> <corners android:radius="7dp" /> </shape> </item> </selector>
补充说明:
- 用
<solid>标签设置背景色,替代原来的android:drawable属性,这样shape的圆角、描边等属性才会被系统识别并应用 - 布局中
android:button="@null"的设置是正确的,这会隐藏Checkbox默认的图标,只显示我们自定义的背景样式
内容的提问来源于stack exchange,提问作者Abm
相关产品推荐
相关产品推荐

