Android, setSelected() и state_selected

У меня возникают проблемы с 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".

Ответ 1

Порядок элементов имеет значение в селекторе xmls, элемент по умолчанию всегда должен быть внизу в списке элементов.

Ответ 2

Важен не только выбранный порядок состояний, но и порядок всех состояний. В моем случае я добавил 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 не показывает мое редактирование полностью, не знаю почему, просто будьте терпеливы).

Ответ 3

Не понятно почему, но я думаю, что это может сработать (обратите внимание на добавление 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>

Надеюсь, что это полезно.