Цвет списка выбора для Android - PullRequest
72 голосов
/ 10 января 2010

Привет всем,

У меня есть 2 вопроса относительно ListView в Android:

  1. Как я могу получить цвет выделенной строки списка? Я попытался использовать метод ListView.getSelector () , который в соответствии с его документацией должен дать мне то, что я ищу, но он дает мне объект Drawable, который я не знаю, как получить цвет от (если возможно ...).

  2. Как мне установить цвет выделенной строки списка? Здесь я попытался использовать метод setSelector () в представлении списка, передав ему объект ColorDrawable, но в результате этого весь фон представления списка окрашен в этот цвет ... и это не то, что я хотел, конечно ...

Спасибо!

Ответы [ 2 ]

89 голосов
/ 10 января 2010

Можно выбрать селектор списка StateListDrawable & mdash; он содержит ссылку на несколько элементов рисования для каждого состояния, в котором список может быть, например, выбран, сфокусирован, нажат, отключен ...

Несмотря на то, что вы можете извлечь рисунок с помощью getSelector(), я не верю, что вы можете извлечь конкретный Drawable из StateListDrawable, и при этом не представляется возможным программно получить цвет непосредственно из ColorDrawable в любом случае .

Что касается настройки цвета, вам нужен StateListDrawable, как описано выше. Вы можете установить это в своем списке, используя атрибут android:listSelector, определяющий рисование в XML следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_enabled="false" android:state_focused="true"
        android:drawable="@drawable/item_disabled" />
  <item android:state_pressed="true"
        android:drawable="@drawable/item_pressed" />
  <item android:state_focused="true"
        android:drawable="@drawable/item_focused" />
</selector>
11 голосов
/ 08 апреля 2013

ДОБАВИТЬ: @ ответ Кристофера не работает в API 7/8 (согласно правильному комментарию @ Джонни), ЕСЛИ вы используете цвета вместо рисования. (В моем тестировании отлично подойдет использование drawables согласно Christopher)

Вот FIX для 2.3 и ниже при использовании цветов:

Что касается @Charles Harley, в 2.3 и ниже есть ошибка, когда заполнение элемента списка цветом приводит к тому, что цвет растекается по всему списку. Его исправление состоит в том, чтобы определить shape чертеж, содержащий нужный вам цвет, и использовать его вместо цвета.

Я предлагаю посмотреть эту ссылку, если вы хотите просто использовать цвет в качестве селектора и ориентированы на Android 2 (или, по крайней мере, разрешить Android 2).

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