Селектор выберет первый элемент, соответствующий текущему состоянию.
Из документации :
Примечание : помните, что Android применяет первый элемент в списке состояний, который соответствует текущему состояние объекта. Итак, если первый элемент в списке не содержит ни одного из указанных выше атрибутов состояния, он применяется каждый раз, поэтому значение по умолчанию всегда должно быть последним (как показано в следующем примере).
Нажатая кнопка также включена, поэтому ваш селектор по-прежнему выбирает состояние «включено», а не состояние «нажато», потому что оно было определено ранее.
Вы можете попробовать изменить порядок, чтобы исправить вашу проблему:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/background_green" android:state_pressed="true" /> <!-- pressed -->
<item android:drawable="@drawable/background_blue_white" android:state_enabled="false" /> <!-- disabled -->
<item android:drawable="@drawable/background_blue" /> <!-- default -->
</selector>
Чтобы избежать подобной путаницы в будущем, хороший подход состоит в том, чтобы c быть более конкретным, чтобы одновременно совпадал только один элемент.
Эти элементы используют исходный порядок, но только один будет соответствовать за раз:
<item android:drawable="@drawable/background_blue" android:state_enabled="true" android:state_pressed="false" />
<item android:drawable="@drawable/background_blue_white" android:state_enabled="false" android:state_pressed="false" />
<item android:drawable="@drawable/background_green" android:state_enabled="true" android:state_pressed="true" />
(обратите внимание, что было бы лучше иметь значение по умолчанию внизу, потому что теперь технически возможно, что нет совпадение)