Android, setSelected () и state_selected - PullRequest
       0

Android, setSelected () и state_selected

12 голосов
/ 30 сентября 2011

У меня проблемы с 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».

Ответы [ 3 ]

32 голосов
/ 30 сентября 2011

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

7 голосов
/ 30 сентября 2012

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

0 голосов
/ 30 сентября 2011

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

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

...