Правильная настройка фона элемента списка - PullRequest
0 голосов
/ 12 октября 2018

Я использую RecyclerView и простой макет элемента, состоящий из ConstraintLayout, содержащего текстовые элементы каждого элемента.Я хочу установить фон для всех элементов, пока

  1. показывает эффект ряби при нажатии.
  2. визуализирует, когда вид активен .
  3. возможность установить цвета.(необязательно, если это действительно так)

Минимальная версия SDK - 21, и ее можно поднимать при необходимости.


Что я пробовал:

  • Использование @android:drawable/list_selector_background не настраивается и не отображает пульсации.
  • Использование ?selectableItemBackground или ?selectableItemBackgroundBorderless не работает, выдает исключение во время выполнения (Failed to resolve attribute [...]).У меня есть библиотека поддержки проектирования, размещенная в моем скрипте gradle, или теперь пакет com.google.android.material.Предварительное добавление android:attr/ привело к той же ошибке.
  • Использование StateListDrawable для самостоятельного создания всего этого с использованием множества <ripple> Drawables показалось чрезмерно сложным, поскольку я не хотел воспроизводить всю функциональность вышеуказанных функций.

1 Ответ

0 голосов
/ 17 октября 2018

Этот ответ связан с @ Cheticamp в сочетании с подходом в эта статья отлично работала:

Макет элемента выглядит следующим образомthis:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/list_item_background_active_handler">

    <include
        layout="@layout/the_actual_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?selectableItemBackground" />

</FrameLayout>

И list_item_background_active_handler выглядит так:

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

    <item android:drawable="@color/listBackgroundActive" android:state_activated="true" />

    <!-- default -->
    <item android:drawable="@android:color/transparent" />

</selector>

Это позволяет обрабатывать активное состояние с помощью пользовательского цвета.Просто наберите isActivated(true) для просмотра элемента в onBindViewHolder() в адаптере.

Цвет эффекта ряби можно настроить с помощью , этот подход .

...