Можно ли применить собственный фон к каждому элементу Listview через селектор списка?
Селектор по умолчанию указывает @android:color/transparent
для state_focused="false"
случая, но изменение его на какой-либо настраиваемый вариант не влияет на элементы, которые не выбраны. В этом ответе Ромен Гай, кажется, предполагает, что это возможно.
В настоящее время я добиваюсь того же эффекта, используя настраиваемый фон для каждого представления и скрывая его, когда элемент выбран / сфокусирован / что угодно, чтобы отображался селектор, но было бы более элегантно, если бы все это было определено в одном месте.
Для справки, это селектор, который я использую, чтобы заставить его работать:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="false"
android:drawable="@drawable/list_item_gradient" />
<!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
<item android:state_focused="true" android:state_enabled="false"
android:state_pressed="true"
android:drawable="@drawable/list_selector_background_disabled" />
<item android:state_focused="true" android:state_enabled="false"
android:drawable="@drawable/list_selector_background_disabled" />
<item android:state_focused="true" android:state_pressed="true"
android:drawable="@drawable/list_selector_background_transition" />
<item android:state_focused="false" android:state_pressed="true"
android:drawable="@drawable/list_selector_background_transition" />
<item android:state_focused="true"
android:drawable="@drawable/list_selector_background_focus" />
</selector>
И вот как я устанавливаю селектор:
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:listSelector="@drawable/list_selector_background" />
Заранее благодарю за любую помощь!
Решение от dglmtn не работает, когда у вас есть 9-патч, который можно рисовать с заполнением в качестве фона. Бывают странные вещи, даже не хочу об этом говорить, если у вас есть такая проблема, вы их знаете.
Теперь, если вы хотите иметь представление списка с разными состояниями и чертежами с 9 патчами (я думаю, он будет работать с любыми чертежами и цветами), вам нужно сделать 2 вещи:
Что вам нужно сделать, это сначала установить row_selector.xml:
Не забывайте про
android:state_selected
. Он работает так же, как иandroid:state_focused
для списка, но применяется к элементу списка.Теперь примените селектор к элементам (row.xml):
Сделайте прозрачный селектор для списка:
Это должно сработать.
источник
Никогда не используйте "цвет фона" для строк вашего списка ...
это заблокирует каждое действие селектора (это была моя проблема!)
удачи!
источник
setBackgroundColor
с «цветом». Вздох ... ИспользуйтеsetBackground
илиsetBackgroundDrawable
согласно вашей версии API с селектором.В статье «Почему мой список черный? Оптимизация под Android» в блоге разработчиков Android подробно объясняется, почему фон списка становится черным при прокрутке. Простой ответ: установите cacheColorHint в своем списке на прозрачный (# 00000000).
источник
Достаточно, если вы вставите
list_row_layout.xml
:listitem_selector.xml:
источник
вместо того:
записывать
источник
Вы можете написать тему:
theme.xml
styles.xml
my_selector - это ваш пользовательский селектор. Извините, я не знаю, как писать свой код.
источник
Я всегда использую один и тот же метод, и он работает каждый раз, везде: я просто использую такой селектор
и установите в ListView (ЭТО ОЧЕНЬ ВАЖНО, ЧТОБЫ ЭТО РАБОТАЕТ) атрибут
для textColor просто поместите в цветовую папку (ВАЖНО, не доступную папку!) селектор, подобный этому
это образец шаблона строки
все, что было показано, работает без утомительных обходных путей. надеюсь, что это поможет
источник
Я не уверен, как добиться желаемого эффекта с помощью самого селектора - в конце концов, по определению, есть один селектор на весь список.
Однако вы можете управлять изменениями выделения и рисовать все, что хотите. В этом примере проекта я делаю селектор прозрачным и рисую полосу на выбранном элементе.
источник
<item android:state_focused="false" android:drawable="@android:color/transparent" />
предложения в селекторе по умолчанию.Команда FrostWire здесь.
Вся API-интерфейс селектора работает не так, как ожидалось. Попробовав все решения, представленные в этой ветке, безрезультатно, мы просто решили проблему в момент раздувания элемента ListView.
Убедитесь, что ваш элемент сохраняет свое состояние, мы сделали это как переменную-член MenuItem (выбрано логическое значение)
Когда вы надуваете, спросите, выбран ли базовый элемент, если да, просто установите доступный ресурс, который вы хотите, в качестве фона (будь то 9patch или что-то еще). Убедитесь, что ваш адаптер знает об этом и вызывает notifyDataChanged (), когда что-то было выбрано.
Было бы здорово, если бы селекторы действительно работали, теоретически это красивое и элегантное решение, но похоже, что оно сломано. ПОЦЕЛУЙ.
источник