1

次のようにカラーステートリストを設定しました。

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

次に、次のように recyclerview アイテムの xml に設定しようとしました。

<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 を設定して手動で色を切り替えると、正しく動作しますが、statelist でこれを行いたいと考えています。

4

2 に答える 2