Цветной список состояний не работает в режиме просмотра

Я настроил список цветов следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:color="@color/white_25percent_opacity" android:state_selected="true"/>
    <item android:color="@color/white_25percent_opacity" android:state_pressed="true"/>
    <item android:color="@color/white_25percent_opacity" android:state_focused="true"/>
    <item android:color="@android:color/white"/>

</selector>

Затем я попытался установить его в xml для элемента recyclerview следующим образом:

<TextView
        android:id="@+id/myTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:layout_centerHorizontal="true"
        android:textSize="18sp"
        android:paddingLeft="10dp"
        android:paddingStart="10dp"
        android:paddingRight="10dp"
        android:paddingEnd="10dp"
        android:textColor="@color/mySelector"
        />

но это не работает - цвет не изменяется при нажатии. Поэтому я попытался установить его программно в onBindViewHolder следующим образом:

viewHolder.myTextView.setTextColor(ContextCompat.getColorStateList(context, R.color.mySelector));

и я тоже попробовал вот так:

viewHolder.myTextView.setTextColor(ContextCompat.getColor(context, R.color.mySelector));

которые тоже не работают. В чем здесь ошибка и почему это не работает для переработчиков? Чтобы уточнить - текст отображается в исходном цвете (белый), но не меняется на нажатый цвет.

Изменить: также попытался решить его, сделав селектор рисованным, но это не сработало:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/white_25percent_opacity" android:state_selected="true"/>
    <item android:drawable="@color/white_25percent_opacity" android:state_pressed="true"/>
    <item android:drawable="@color/white_25percent_opacity" android:state_focused="true"/>
    <item android:drawable="@android:color/white"/>

</selector>

Если я устанавливаю ontouchlistener и переключаю цвета вручную, тогда он работает правильно - но я хочу сделать это с помощью списка состояний.

2 ответа

Привет. Реализуйте свой XML, как показано ниже, надеюсь, это будет полезно, возможно, проблема в том, что вы указали и state_pressed, и state_selected = true.

    <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Color when the row is selected -->
    <item android:drawable="@android:color/darker_gray" android:state_pressed="false" android:state_selected="true" />
    <!-- Standard background color -->
    <item android:drawable="@android:color/white" android:state_selected="false" />
</selector>

Оказывается, мне нужно было установить это в textview, чтобы оно работало:

android:clickable="true"
Другие вопросы по тегам