Selector de texto no funciona

Lo hice antes. Yo copié pegado. Copié y pegué muchos otros ejemplos de la red. Simplemente no puedo hacer que el selector textcolor funcione. Establece el color predeterminado en la vista de texto, pero no cambiará si hace clic en la vista de texto. El settings_selector para el fondo funciona bien.

Este es el diseño:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/settings_selector" android:clickable="true" android:id="@+id/llRecentChanges" android:paddingTop="5dp" android:paddingBottom="5dp" android:paddingLeft="5dp"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/llRecentChanges2" android:layout_weight="1" android:layout_gravity="center_vertical"> <TextView android:id="@+id/tvAbout" android:text="@string/settings_recentchanges" android:gravity="center_vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="16dp" android:textColor="@drawable/settings_selector_txt" > </TextView> <TextView android:id="@+id/tvAbout2" android:text="@string/settings_recentchanges2" android:gravity="center_vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@drawable/settings_selector_txt" android:textSize="10dp"> </TextView> </LinearLayout> </LinearLayout> 

Este es el archivo settings_selector_txt xml:

 <?xml version="1.0" encoding="utf-8"?> <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="#ffa800" /> <item android:state_focused="false" android:state_pressed="true" android:color="#ffa800" /> <item android:color="#FFFFFF" /> </selector> 

o esto

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

o esto

 <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="#000000" /> <item android:state_focused="false" android:state_pressed="true" android:color="#000000" /> <item android:color="#ffffff" /> </selector> 

Ninguno de ellos está funcionando. Poner el selector xml en la carpeta de color tampoco es una solución. ¿Algunas ideas?

Asegúrese de que su TextView está listo para escuchar los estados que está solicitando. Por ejemplo, para ser capaz de llegar a la "state_pressed" su texto debe ser clickable:

 android:clickable="true" 

EDIT: Ahí vamos. Este diseño hace el trabajo. Tenga en cuenta que la vista que reúne el evento click es linearLayout, pero TextView la reproduce a causa de "duplicateParentState" establecida en true. El selector de colores se encargaría de los colores para los diferentes estados.

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/testLlayout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:clickable="true" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@drawable/textview_selector" android:duplicateParentState="true" android:text="TextView" /> </LinearLayout> 

Y aquí está el código para el selector de color.

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

Eso debería ser.

No es necesario establecer android:clickable="true" para TextView o android:duplicateParentState="true" .

Solución
Paso 1: Defina su selector de color en la carpeta res / color (el selector de color de Jose L Ugia es bueno para esto).
Paso 2: establezca este selector de color en su TextView como android:textColor="@color/m_text_selector" (no como @drawable / * !!!)

Nota: Si desea establecer el selector textColor de forma programática, debe obtener su selector como lista de estado de color no como un color;

 textView.setTextColor(getResources().getColorStateList(R.color.m_text_selector)); 

Eso es todo.

Asegúrese de que todos los diseños que puedan estar envolviendo sus TextViews antes de que su diseño "haga clic" también tengan duplicateParentState = "true", de lo contrario, la vista de texto no alcanzará el estado del elemento que desea.

Creo que usar ColorStateList mejor opción a las versiones más antiguas y últimas de Android.

 int[][] states = new int[][] { new int[] { android.R.attr.state_pressed}, // pressed new int[] { android.R.attr.state_focused}, // focused new int[] {} }; int[] colors = new int[] { getResources().getColor(R.color.green_color), // green getResources().getColor(R.color.green_color), // green getResources().getColor(R.color.white) // white }; ColorStateList list = new ColorStateList(states, colors); mTextView.setFocusable(true); mTextView.setClickable(true); mTextView.setTextColor(list); 

Debe establecer esto en su código: android:clickable="true" para TextViews

  • ¿Existe tal llamada de método "getBackgroundColor"?
  • Cómo configurar mulitple clic evento para la única textview?
  • Spannable Vs Tipo Vs Html
  • TextView con color de fondo sólo en el propio texto
  • Justificar texto en TextView Android
  • Cómo eliminar las líneas antiguas de un TextView
  • Single TextView con texto coloreado múltiple
  • Obtener el texto visible actual en la vista de texto
  • El fondo de TextView se está estirando
  • Cómo funciona autolink: map work
  • Android: ¿define TextView TextStyle mediante programación?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.