как изменить цвет шрифта в выбранных / сфокусированных элементах ListView? - PullRequest
36 голосов
/ 12 октября 2010

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

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

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

Кому-нибудь удалось заставить что-то подобное работать?

Спасибо.

Ответы [ 5 ]

68 голосов
/ 11 сентября 2011

Ни один из этих возможных ответов, когда ваш 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.

23 голосов
/ 18 января 2011

в ваших текстовых свойствах

android:textColor="@color/text_selector"

в разрешении / цвете 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>
11 голосов
/ 07 октября 2014

Чтобы он работал при выборе, используйте следующий код:

<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" состояние.

2 голосов
/ 10 июля 2015

При развертывании приложения для Android 11+ (HoneyComb +) следует использовать

android:state_activated="true"

для выбранного состояния списка. Для более ранних версий используйте комбинацию:

android:state_checked="true"
android:state_activated="true"

Конечно, не забудьте включить

android:duplicateParentState="true"

чтобы представление могло получить активированное / проверенное состояние из родительского элемента представления списка

1 голос
/ 08 сентября 2016

Также вы можете создать папку 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...