すでに回答したように、最も簡単な解決策は、RecyclerView
行の背景として次のいずれかを追加することです。
android:background="?android:attr/selectableItemBackground"
android:background="?attr/selectableItemBackground"
ただし、この方法で問題が発生している場合、または色をより細かく制御したい場合は、以下を実行できます。
カスタムリップルエフェクト
この答えは、この単純なAndroid RecyclerViewの例から始まります。次の画像のようになります。
API 21以前のデバイス用のセレクターを追加
API 21(Android 5.0 Lollipop)以前は、RecyclerView
アイテムをクリックすると、背景色が変更されました(波及効果はありません)。それも私たちがやろうとしていることです。それらのデバイスを使用しているユーザーがまだいる場合は、その動作に慣れているので、あまり心配する必要はありません。(もちろん、本当に波及効果も必要な場合は、カスタムライブラリを使用できます。)
res/drawable
フォルダを右クリックし、[ 新規]> [描画可能リソースファイル ]を選択します。それを呼ぶcustom_ripple
。[OK]をクリックして、次のコードに貼り付けます。
custom_ripple.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="@color/colorAccent" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent" />
</shape>
</item>
</selector>
colorAccent
既に使用可能だったので、押された状態のハイライト色として使用しましたが、好きな色を定義できます。
API 21以上のデバイスに波及効果を追加
res/drawable
フォルダを右クリックし、[ 新規]> [描画可能リソースファイル ]を選択します。custom_ripple
もう一度電話して。ただし、今回はまだ[OK]をクリックしないでください。[ 利用可能な修飾子]リストから[ バージョン ]を選択し、[ >> ]ボタンをクリックし21
て、プラットフォームAPIレベルを記述します。[OK]をクリックして、次のコードを貼り付けます。
v21 / custom_ripple.xml
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/colorAccent">
<item
android:id="@android:id/mask"
android:drawable="@android:color/white" />
</ripple>
繰り返しにcolorAccent
なりますが、リップルカラーを使用したので使用しましたが、好きな色を使用できます。マスクは、波及効果を行レイアウトのみに限定します。マスクの色はどうやら問題ないので、不透明な白を使用しました。
背景に設定
RecyclerViewアイテムのルートレイアウトで、背景を、作成したカスタムリップルに設定します。
android:background="@drawable/custom_ripple"
開始したサンプルプロジェクトでは、次のようになります。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="@drawable/custom_ripple"
android:padding="10dp">
<TextView
android:id="@+id/tvAnimalName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"/>
</LinearLayout>
完成した
それでおしまい。これでプロジェクトを実行できるようになります。助けてくれたこの回答とこのYouTubeビデオに感謝します。
CardView
ませんが、このより一般的な質問に関係しないよりも、その質問にaがあることの特定の側面があります。