启用禁用并在 android 中选中的自定义复选框

custom checkbox with enable disable and selected in android

这是我的简单select或

    <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_square_blue_border_unselected" android:state_checked="false" />
    <item android:drawable="@drawable/ic_square_checkbox_selected" android:state_checked="true" />
    <item android:drawable="@drawable/ic_square_blue_border_unselected" />
</selector>

当我添加 state_enabled 时:false/true 它说,
"This item is unreachable as the previous item is more general match"
...我不明白为什么会这样?因为我还添加了一个新的 属性 -> state_enabled...我想如果两个属性都匹配,那么只有 select 相应的 drawable。

我想做类似的事情,

checked && not disabled -> blue color checked box,
not checked && not disabled -> blue border unchecked box,
checked && disabled -> gray color checked box,
not checked &&  disabled -> gray color unchecked box

而且,checkbox.setEnabled(false) 不适用于这种情况。这是我的 xml 代码。

<CheckBox
                        android:id="@+id/checkbox"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:button="@drawable/selector_chkbox_blue_border"
                        android:textColor="@color/steel_grey"
                        android:paddingLeft="10dp"
                        android:text="Checkbox text"/>

我也试过了,还是不行:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_square_blue_border_unselected" android:state_checked="false" />
    <item android:drawable="@drawable/ic_square_checkbox_selected" android:state_checked="true" />
    <item android:drawable="@drawable/ic_square_checkbox_selected_disabled" android:state_enabled="false"/>
    <item android:drawable="@drawable/ic_square_blue_border_unselected_disabled" />
</selector>

在没有选项的项目前加上state_enabled : false/true的项目,这里是<item android:drawable="@drawable/ic_square_blue_border_unselected" />

因为这个项目没有条件,它适用于每个项目并覆盖它下面的所有项目,因为 Android 从上到下连续检查它,就像 if-else if 条件,当它找到匹配项,它停止。

因此,为了工作,您必须在最后一个选项中添加没有选项的项目。

示例:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_square_blue_border_unselected" android:state_checked="false" />
    <item android:drawable="@drawable/ic_square_checkbox_enabled" android:state_enabled="true" />
    <item android:drawable="@drawable/ic_square_blue_border_disabled" android:state_enabled="false" />
    <item android:drawable="@drawable/ic_square_checkbox_selected" android:state_checked="true" />
    <item android:drawable="@drawable/ic_square_blue_border_unselected" />
</selector>
<selector xmlns:android="http://schemas.android.com/apk/res/android">


    <item android:drawable="@drawable/ic_square_checkbox_selected" android:state_checked="true" android:state_enabled="true"/>
    <item android:drawable="@drawable/ic_square_blue_border_unselected_disabled" android:state_checked="false" android:state_enabled="false"/>


    <item android:drawable="@drawable/ic_square_checkbox_selected_disabled" android:state_checked="true" android:state_enabled="false"/>
    <item android:drawable="@drawable/ic_square_blue_border_unselected" />


</selector>

这是可行的,默认的可绘制对象没有任何状态,其他的将有两种状态...