RecyclerView тематический фон выделения и эффект ленты - PullRequest
0 голосов
/ 10 октября 2019

Я использую RecyclerView с ListAdapter, который позволяет выбирать несколько элементов, используя длинный щелчок, и открывать один элемент, используя один щелчок, в основном, как в файловом менеджере. Для этих целей я успешно использую трекер выбора и использую поле isActivation для пометки выбранных представлений.

// ListAdapter<..., EntryViewHolder>

override fun onBindViewHolder(entryViewHolder: EntryViewHolder, position: Int) {
    /* ... handle content ... */
    val isSelected = /* check SelectionTracker */
    entryViewHolder.bind(isSelected, /* ... */)
}   

inner class EntryViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    fun bind(isSelected: Boolean) {
        itemView.isActivated = isSelected
    }
}

Моя проблема теперь связана с правильным оформлением этих элементов. Во-первых, если itemView выбран (т.е. активирован), я хотел бы использовать правильный фон на основе темы (без пользовательского цвета).

Для этой цели я добавил свой собственный селектор в itemView с "android:background = "@ drawable / background_selector" и установите colorControl * в качестве цвета, но я предполагаю, что поля colorControl не подходят для этой цели.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_activated="true">
        <color android:color="?attr/colorControlHighlight"/>
    </item>

    <item android:state_activated="false" android:state_pressed="false">
        <color android:color="@android:color/transparent"/>
    </item>

    <item android:state_activated="false" android:state_pressed="true">
        <color android:color="?attr/colorControlActivated"/>
    </item>
</selector>

Теперь мои вопросы:

  • Какой цвет или рисунок я должен использовать в качестве фона для этих различных состояний, чтобы я мог просто использовать предопределенную тему? Например, какая тема / запись стиля используется ListView по умолчанию?
  • Чтобы получить лентуэффект, как я могу использовать? attr / selectableItemBackground (не нужно поддерживать телефоны

И сочетание этих вопросов:

  • Могу ли я избавиться от своего собственного селектора и в моем itemView использовать

    android: background = "? Attr / selectableItemBackground"

и установить какое-либо свойство, чтобы использовать правильный выбранный / активированный фон в ресурсах Android? (Я знаю, что мог бы сделать это в моем viewHolder, но должен быть другой способ - просто использовать атрибуты в стиле xml?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...