Пользовательский флажок с включенным отключением и выбран в Android - PullRequest
0 голосов
/ 12 октября 2019

Это мой простой селектор

    <?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 он говорит,
"Этот элемент недоступен, как и предыдущий элементболее общий матч "
... я не понимаю, почему это так? так как я также добавляю новое свойство -> state_enabled ... я думал, что это будет, если оба свойства будут сопоставлены, тогда выберите только соответствующий объект рисования.

Я хочу сделать что-то вроде

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

Ответы [ 2 ]

0 голосов
/ 15 октября 2019
<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>

Это работает, для рисования по умолчанию не будет никаких состояний, другие будут иметь оба состояния ...

0 голосов
/ 12 октября 2019

Добавить элемент с 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>
...