Изменить цвет текста TextView на фокус и щелкнуть?

У меня есть интерактивный TextView, который я хочу, чтобы передать некоторые цвета. Но я не знаю, как это сделать. Ниже приведены соответствующие фрагменты кода из моих двух файлов, с которыми я работаю:

TextView title = new TextView(this);
title.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
title.setTextColor(R.color.textcolor);
title.setText(titleLine);
title.setTypeface(null, Typeface.BOLD);
title.setClickable(true);
title.setId(idLine);
title.setFocusable(true);

title.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {

                /* Irrelevant code */                   

    }
});

И это мой файл textcolor.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="#000000"/> <!-- pressed -->
    <item android:state_focused="true"
          android:color="#000000"/> <!-- focused -->
    <item android:color="#000000"/> <!-- default -->
</selector>

Когда я использую textcolor файл, набрав title.setTextColor(R.color.textcolor);, цвет текста становится серым, независимо от того, нажимаю ли я его или нет. Что странно, поскольку я написал "# 000000" во всех цветовых полях.
Но если я удалю код setTextColor, получим textView светло-серый цвет, и когда я его нажму, он станет черным. Но это не те цвета, которые я хочу.

Итак, может ли кто-нибудь помочь мне с этой проблемой?

Просто пояснить: я хочу, чтобы можно было указать цвета для текста, когда он нормальный, нажатый и сфокусированный.

Ответ 1

Если вы хотите установить цвет с сохранением цвета из кода, вам необходимо передать ColorStateList в качестве аргумента для setTextColor передача int в метод приводит к установке цвета для всех состояний. Это также похоже на то, что ваш xml не совсем корректен. Пример из документов ColorStateList выглядит так: (должно быть расположено следующим образом: res/color/selector_txt.xml):

 <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>

UPD о том, как установить ColorStateList в цвет текста:

ColorStateList cl = null;
try {
   XmlResourceParser xpp = getResources().getXml(R.color.selector_txt);
   cl = ColorStateList.createFromXml(getResources(), xpp);
} catch (Exception e) {}

С XML это легко:

android:textColor="@color/selector_txt"

Ответ 2

Шаг 1: установите цвет текста в xml, как этот

Android: TextColor = "@цвет/text_color"

Шаг 2. Создайте res/color/text_color.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android" >

<item android:state_pressed="true"
      android:color="#ffffffff"/> <!-- pressed -->
<item android:state_focused="true"
      android:color="#ff0000ff"/> <!-- focused -->
<item android:color="#ff000000"/>  <!--default -->

</selector>

Ответ 3

Попробуй это.. Это сработало для меня:

Имя файла: res/color/bg_tab_text_color.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false" android:state_selected="false" android:color="@color/tab_unselected_text_color"/>
    <item android:state_pressed="true" android:color="@color/tab_selected_text_color"/>
    <item android:state_pressed="false" android:state_selected="true" android:color="@color/tab_selected_text_color"/>
    <item android:color="@color/tab_unselected_text_color"></item>
</selector>

Попробуйте установить цвет в макете xml как:

android:textColor="@color/bg_tab_text_color"

Ответ 4

Посмотрите класс R.java(он генерируется автоматически). У вас есть что-то вроде этого:

 public static final class color {
        public static final int gray_transparent=0x7f050001;
}

Итак, в вашем коде в строке:

title.setTextColor(R.color.textcolor);

вы не устанавливаете значения из textcolor.xml, а int из R.java(который содержит адрес textcolor.xml). Правильный способ установки цвета:

title.setTextColor(getResources().getColorStateList(R.color.textcolor));

Ответ 5

Это очень легко. Попробуйте это. Это сработало для меня:

Имя файла: res/color/bg_tab_text_color.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_pressed="true" android:drawable="@color/blue" />

Попробуйте установить цвет в макете xml как:

android:textColor="@color/bg_tab_text_color"

Ответ 6

В res/drawable/tab_textColor.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:color="#FFFFFF" />
    <item android:state_pressed="true" android:color="#FFFFFF" />
    <item android:color="#CCCCCC" />
</selector>



<TextView
    android:id="@+id/title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/icon"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="5dp"
    android:text="@string/tab_indicator_home"
    android:textColor="@drawable/tab_textcolor"
    android:textSize="10sp"
    android:visibility="visible"
    tools:ignore="SmallSp" />

Ответ 7

В res/color/text_selector.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/white"
          android:state_selected="true"/>
    <item android:color="#8020e0"/>
</selector>

В макете:

<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Word"
    android:textColor="@color/text_selector"
    android:textSize="12sp"/>

В коде:

textView.setSelected(false); // To deselect.
textView.setSelected(true);