Изменить цвет текста в 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 светло-серый цвет, и когда я нажму на него, он станет черным. Но это не те цвета, которые я хочу.

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

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

Solutions Collecting From Web of "Изменить цвет текста в TextView в фокусе и щелкнуть?"

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

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

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

андроид: 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> 

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

Имя файла: 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" 

Посмотрите класс 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)); 

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

Имя файла: 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" 

В 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" /> 

В 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);