Как определить ColorStateList для TextView? - PullRequest
30 голосов
/ 30 сентября 2010

Когда мой ListViewItem выделен, я хочу, чтобы текст стал белым.Как я могу определить это?

<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_focused="true" android:color="@color/testcolor1"/>
   <item android:state_pressed="true" android:state_enabled="false" android:color="@color/testcolor2" />
   <item android:state_enabled="false" android:color="@color/testcolor3" />
   <item android:color="@color/testcolor5"/>
 </selector>

Ответы [ 3 ]

66 голосов
/ 30 сентября 2010

Создайте файл res / drawable / text_color.xml:

 <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:state_pressed="false" android:color="#ffffff" />
    <item android:state_focused="true" android:state_pressed="true" android:color="#ffffff" />
    <item android:state_focused="false" android:state_pressed="true" android:color="#ffffff" />
    <item android:color="#000000" />
</selector>

Затем используйте @drawable/text_color из xml (или R.drawable.text_color из кода) в качестве цвета текста для элементов списка.

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

В дополнение к тому, что уже было сказано выше, я хотел бы выделить одну точку, взятую из приведенного ниже URL.

https://developer.android.com/reference/android/content/res/ColorStateList.html

Примечание. Список спецификаций состояний будет сопоставляться в том порядке, в котором они указаны в файле XML. По этой причине более конкретные элементы должны быть размещены ранее в файле. Элемент без спецификации состояния считается соответствующим какому-либо набору состояний и обычно полезен как конечный элемент, который будет использоваться по умолчанию.

Важно, чтобы у вас было более широкое условие в нижней части тега селектора. Надеюсь, это поможет!

0 голосов
/ 11 февраля 2019

Попробуйте это ...

Сначала создайте список состояний цветов text_color.xml, помещенный в каталог res/color.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
    tools:ignore="MissingDefaultResource">
  <item android:color="#000000" android:state_enabled="false"/>
  <item android:color="#FFFFFF"/>
</selector>

Во-вторых, используйте

getColorStateList(@NonNull Context context,
            @ColorRes int id)

метод получения списка состояний цвета.

textView.setTextColor(ContextCompat.getColorStateList(context, R.color.text_color))

В-третьих, включить (true) или отключить (false) в зависимости от ваших требований,

textView.isEnabled = true //when item is highlighted

Счастливое кодирование ...

...