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