启用禁用并在 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>
这是可行的,默认的可绘制对象没有任何状态,其他的将有两种状态...
这是我的简单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>
这是可行的,默认的可绘制对象没有任何状态,其他的将有两种状态...