Подтвердить что ты не робот

Как изменить цвет шрифта в выбранных/сфокусированных элементах ListView?

Я борюсь с этим, что, по-видимому, очень простой эффект, но невероятно не нашел никакого интуитивного способа сделать это в Android.

У меня есть ListView, и мне удалось настроить фоновые изображения, чтобы выбранный элемент был подсвечен, получив новый фоновый рисунок. Это я создаю новый стиль, в котором я устанавливаю атрибут android: listSelector, чтобы указать StateListDrawable, где я указал, какие чертежи использовать для каждого состояния.

Однако каждый элемент ListView представляет собой LinearLayout, где у меня есть два TextView. Моя цель состоит в том, чтобы иметь возможность изменять цвет текста этих дочерних представлений всякий раз, когда выбран или нажат родительский элемент, в то же время, что и выполняемый фоновый рисунок. Я знаю, что есть ColorStateList, но не удалось выполнить успешную настройку.

У кого-нибудь есть что-то подобное?

Спасибо.

4b9b3361

Ответ 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"