Вывод состояния и состояния состояния
У меня есть кнопка, и я хочу, чтобы у меня был другой фон, когда я устанавливал:
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>
Но кнопка все еще имеет нормальный фон, когда она отключена.
Что мне не хватает?
Ответы
Ответ 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>