自定义圆形CheckBox显示灰色图标而非选中自定义Drawable问题求助
问题描述
我想创建一个自定义圆形CheckBox,但选中状态下没有显示自定义的选中Drawable,反而显示一个灰色图标。
我的CheckBox布局代码
<CheckBox android:id="@+id/beAnonymousTextView" style="@style/TextViewStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" android:text="我想要匿名" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/emailButton" android:button="@drawable/custom_checkbox" android:paddingLeft="10dp"/>
自定义Drawable选择器(custom_checkbox.xml)
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/custom_checkbox_selected" android:state_checked="true" /> <item android:drawable="@drawable/custom_checkbox_selected" android:state_pressed="true" /> <item android:drawable="@drawable/custom_checkbox_unselected" android:state_checked="false" /> </selector>
自定义Drawable代码
custom_checkbox_selected.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="@color/orange" /> <stroke android:color="@color/white" android:width="3dp" /> <size android:width="30dp" android:height="30dp" /> </shape>
custom_checkbox_unselected.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <stroke android:color="@color/white" android:width="3dp" /> <size android:width="30dp" android:height="30dp" /> </shape>
解决方案
试试以下几个修复步骤:
移除样式冲突
你给CheckBox设置的@style/TextViewStyle可能包含干扰按钮显示的属性,先移除该样式,或者检查样式中是否有android:button、android:drawableLeft等属性,避免和自定义设置冲突。完善选择器默认状态
当前选择器缺少默认状态的item,导致部分状态下系统 fallback 到默认灰色图标。在选择器末尾添加默认项:<item android:drawable="@drawable/custom_checkbox_unselected" />修改后的完整选择器:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/custom_checkbox_selected" android:state_checked="true" /> <item android:drawable="@drawable/custom_checkbox_selected" android:state_pressed="true" /> <item android:drawable="@drawable/custom_checkbox_unselected" android:state_checked="false" /> <item android:drawable="@drawable/custom_checkbox_unselected" /> <!-- 默认状态 --> </selector>更换自定义Drawable的设置方式
直接设置android:button可能存在兼容性问题,换成隐藏默认按钮+设置左侧Drawable的方式:<CheckBox android:id="@+id/beAnonymousTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" android:text="我想要匿名" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/emailButton" android:button="@null" android:drawableLeft="@drawable/custom_checkbox" android:drawablePadding="10dp" android:paddingLeft="10dp"/>检查颜色资源
确认@color/orange和@color/white在res/values/colors.xml中正确定义,无拼写或颜色值错误。
内容的提问来源于stack exchange,提问作者Alyona
相关产品推荐
相关产品推荐

