Селектор в TextView не меняет цвет

У меня есть программно созданный TextView, и я добавил для него xml-файл селектора цвета. В файле селектора есть только один активированный и состояние по умолчанию.

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="#ff867f"/>
<item android:color="#c50e29" android:state_activated="true"/>
</selector>

Но если я активирую TextView в действии, он не меняет цвет текста и по-прежнему показывает цвет по умолчанию.

        tv_header_exam.setActivated(true);
        tv_text_exam.setActivated(true);
        tv_header_exam.setTextColor(getResources().getColor(R.color.exam));
        tv_text_exam.setTextColor(getResources().getColor(R.color.exam));

Я что-то пропустил здесь?

РЕДАКТИРОВАТЬ:

Я также пробовал это со следующим селектором:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="#c50e29" android:state_activated="true"/>
<item android:color="#ff867f" android:state_activated="false"/>
</selector>

person Deno Agüero    schedule 30.07.2017    source источник
comment
Это не работает. Он показывает только цвет текста состояния по умолчанию   -  person Deno Agüero    schedule 30.07.2017
comment
Вы пытались вызвать tv_header_exam.setTextColor перед tv_header_exam.setActivated?   -  person Mina Farid    schedule 30.07.2017
comment
Вы не забыли назначить селектор фону TextView?   -  person RonTLV    schedule 30.07.2017


Ответы (1)


Используйте getColorStateList() вместо getColor().

Если вы поддерживаете ‹ API 23, вы можете использовать вспомогательный метод,

ContextCompat.getColorStateList(context, R.color.your_selector);

Javadoc для getColor():

Возвращает целое число цвета, связанное с конкретным идентификатором ресурса. Если ресурс содержит сложный {@link ColorStateList}, то возвращается цвет по умолчанию из набора.

JavaDoc для getColorStateList():

Возвращает список состояний цвета, связанный с конкретным идентификатором ресурса. Ресурс может содержать либо одно необработанное значение цвета, либо сложный {@link ColorStateList}, содержащий несколько возможных цветов.

person Bob    schedule 30.07.2017
comment
Это решение. Он работает с getColorStateList(). Спасибо - person Deno Agüero; 30.07.2017