Color statelist not working on recyclerview textview

773 Views Asked by At

I set up a color statelist like so:

<?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>

Then I tried to set it in the xml for a recyclerview item like so:

<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"
        />

but it doesnt work - the color doesnt change when pressed. So I tried to set it programmatically in onBindViewHolder like this:

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

and I also tried like this:

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

which also don't work. Where is the mistake here and why doesn't this work for recyclerviews? To clarify - the text is shown in the initial color (white) but doesn't change to the pressed color.

Edit: also tried to solve it by making the selector a drawable - but it didn't work:

<?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>

If I set an ontouchlistener and switch the colors manually then it works properly - but I want to do this with a statelist.

2

There are 2 best solutions below

0
On

Turns out I needed to set this on the textview to make it work:

android:clickable="true"
1
On

Hi Implement your XML like the below code , Hope it would be helpful may be the issue is you have given both state_pressed and 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>