Как изменить цвет шрифта в выбранных/сфокусированных элементах ListView?
Я борюсь с этим, что, по-видимому, очень простой эффект, но невероятно не нашел никакого интуитивного способа сделать это в Android.
У меня есть ListView, и мне удалось настроить фоновые изображения, чтобы выбранный элемент был подсвечен, получив новый фоновый рисунок. Это я создаю новый стиль, в котором я устанавливаю атрибут android: listSelector, чтобы указать StateListDrawable, где я указал, какие чертежи использовать для каждого состояния.
Однако каждый элемент ListView представляет собой LinearLayout, где у меня есть два TextView. Моя цель состоит в том, чтобы иметь возможность изменять цвет текста этих дочерних представлений всякий раз, когда выбран или нажат родительский элемент, в то же время, что и выполняемый фоновый рисунок. Я знаю, что есть ColorStateList, но не удалось выполнить успешную настройку.
У кого-нибудь есть что-то подобное?
Спасибо.
Ответы
Ответ 1
Ни один из них не является возможным ответом, когда ваш ListView скомпрометирован макетом, который имеет несколько видов. Вам нужно установить представления для вашего ребенка:
android:duplicateParentState="true"
Теперь вы можете использовать методы, описанные выше, чтобы объявить цвета вашего TextViews с помощью селектора, например:
android:textColor="@drawable/my_row_selector"
и я уверен, что вы знаете, но селектор может быть таким же простым, как:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="@color/white" />
<item android:color="@color/black" />
</selector>
Как вы можете видеть, значения @color допустимы. Надеюсь, это поможет.
Также - android: state_pressed используется вместе с AdapterView.OnItemClickListener.
Ответ 2
в ваших предложениях по тексту
android:textColor="@color/text_selector"
в res/color
text_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="YOUR_CUSTOM_COLOR" />
<item android:state_selected="true" android:color="YOUR_CUSTOM_COLOR" />
<item android:color="YOUR_CUSTOM_COLOR" />
</selector>
Ответ 3
Чтобы сделать работу над выбором, используйте следующий код:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="#fff"/>
<item android:state_activated="true" android:color="#fff"/>
<item android:color="#000" />
</selector>
По-видимому, ключ находится в состоянии state_activated="true"
.
Ответ 4
При развертывании приложения для Android 11+ (HoneyComb +) вы должны использовать
android:state_activated="true"
для выбранного состояния списка.
Для более ранних версий используйте комбинацию:
android:state_checked="true"
android:state_activated="true"
Конечно, не забудьте включить
android:duplicateParentState="true"
чтобы представление могло получить активированное/проверенное состояние из элемента представления родительского списка.
Ответ 5
Также вы можете создать папку res/color
и добавить файл "text_selector.xml" со следующими строками:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true" android:color="#f0f"/>
<item android:state_pressed="true" android:color="#f0f"/>
<item android:color="#000"/>
</selector>
После этого назначьте в TextView:
android:textColor="@color/text_selector"