Как уже было сказано, самое простое решение - просто добавить одно из следующего в 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
. Нажмите ОК и вставьте следующий код.
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
снова. Но на этот раз пока не нажимайте ОК. Из Доступных отборочного списка выберите версию , затем нажмите >> кнопку и запись 21
на уровень API платформы . Теперь нажмите ОК и вставьте следующий код.
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
в этом вопросе есть определенные аспекты, которые не относятся к этому более общему вопросу.