Ответ 1
Порядок элементов имеет значение в селекторе xmls, элемент по умолчанию всегда должен быть внизу в списке элементов.
У меня возникают проблемы с View.setSelected()
. Views
отмечены как выделенные - TextViews
, например, изменить цвет шрифта - но мои фоновые селекторы, похоже, не регистрируют изменения.
Селектор параметров:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/transparent" />
<item android:state_selected="true">
<shape android:shape="rectangle">
<solid android:color="#ff8600" />
</shape>
</item>
</selector>
Я даже не уверен, какая контекстная информация будет полезна. Представления являются дочерними элементами LinearLayout, и я программно устанавливаю выбранное состояние внутри события касания. Как я уже сказал, он работает, так как цвет шрифта идет от белого до серого, но фон остается тем же.
Изменить. Я проверял глупые ошибки перед публикацией: P. Ответ: "Не добавляйте атрибут android: background".
Порядок элементов имеет значение в селекторе xmls, элемент по умолчанию всегда должен быть внизу в списке элементов.
Важен не только выбранный порядок состояний, но и порядок всех состояний. В моем случае я добавил state_pressed
как первый, а мой state_selected
не работает. Поэтому я изменил порядок следующим образом, а затем он работал:
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:state_selected="false"
android:drawable="@drawable/chooser_normal"></item>
<item
android:state_selected="true"
android:drawable="@drawable/chooser_pressed"></item>
<item
android:state_pressed="true"
android:drawable="@drawable/chooser_pressed"></item>
<item
android:state_pressed="false"
android:drawable="@drawable/chooser_normal"></item>
</selector>
Теперь я столкнулся с проблемой, если нажать кнопку, она будет находиться в выбранном состоянии, но не в нажатом состоянии. Таким образом, решение должно быть таким, чтобы упорядочить такие состояния, как это и дополнительные, рекомендуется добавить внешний вид кнопки по умолчанию:
Сначала установите выбранное состояние и после этого установите аналогично нажатому состоянию попеременно. (На данный момент stackoverflow не показывает мое редактирование полностью, не знаю почему, просто будьте терпеливы).
Не понятно почему, но я думаю, что это может сработать (обратите внимание на добавление state_selected = "false" ):
<item android:state_selected="false" android:drawable="@android:color/transparent" />
<item android:state_selected="true">
<shape android:shape="rectangle">
<solid android:color="#ff8600" />
</shape>
</item>
Надеюсь, что это полезно.