Подтвердить что ты не робот

Вывод состояния и состояния состояния

У меня есть кнопка, и я хочу, чтобы у меня был другой фон, когда я устанавливал:

android:enabled="false"

Здесь файл ресурсов для фона:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false"
          android:drawable="@drawable/bttn_orange_normal" /> <!-- pressed -->
    <item android:state_pressed="true"
          android:drawable="@drawable/bttn_orange_selected" /> <!-- focused -->
    <item android:state_enabled="false" android:drawable="@drawable/bttn_grey_disabled"/>
    <item android:state_enabled="true" android:drawable="@drawable/bttn_orange_normal"/>
</selector>

Но кнопка все еще имеет нормальный фон, когда она отключена. Что мне не хватает?

4b9b3361

Ответ 1

Поместите эту строку:

<item android:state_enabled="false" android:drawable="@drawable/bttn_grey_disabled"/>

как первый элемент (это должен быть первый элемент, иначе он не будет работать) тега selector.

Финал:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
            <item android:state_enabled="false" android:drawable="@drawable/bttn_grey_disabled"/>
            <item android:state_pressed="false"
              android:drawable="@drawable/bttn_orange_normal" /> <!-- pressed -->
            <item android:state_pressed="true"
              android:drawable="@drawable/bttn_orange_selected" /> <!-- focused -->
            <item android:state_enabled="true" android:drawable="@drawable/bttn_orange_normal"/> <!-- idle state -->
</selector>

Ответ 2

Ответ Vincent Ducastel правильный, однако он не описывает почему решение работает.

Когда Android перемещается по списку доступных элементов, он перемещает список сверху вниз, в каждом случае оценивает, соответствует ли текущее состояние представления состояниям, определенным для каждого элемента. Затем выбирает первый элемент, соответствующий условиям, и игнорирует остальные.

Вот почему вы должны всегда предоставлять элемент по умолчанию в нижней части списка, а также предоставлять средства отображения сложных условий выбора. Например, если вы хотите иметь специальное нажатое состояние, когда элемент отключен, вы должны определить следующие элементы:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    ...
    <item android:state_enabled="false" android:state_pressed="false" android:drawable="@drawable/btn_grey_disabled"/>
    <item android:state_enabled="false" android:state_pressed="true" android:drawable="@drawable/btn_white_disabled_selected"/>
    ...
</selector>