2011-03-20 29 views
21

Tengo un TextView en el que puedo hacer clic y quiero dar algunos colores. Pero no sé cómo. Estos son los fragmentos de código relevantes de mis dos archivos que estoy trabajando con:¿Cambiar el color de TextView que se puede hacer clic en el foco y hacer clic?

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

    } 
}); 

y este es mi archivo 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> 

Cuando utilizo el color de texto-archivo escribiendo title.setTextColor (R.color.textcolor);, el textcolor simplemente se vuelve gris, independientemente de si lo presiono o menos. Lo cual es extraño ya que he escrito "# 000000" en todos los campos de color.
Pero si elimino el código setTextColor, obtiene el texto View un color gris claro, y cuando lo presiono, se vuelve negro. Pero esos no son los colores que quiero.

Entonces, ¿alguien me puede ayudar con este problema?

Solo para aclarar: Quiero ser capaz de especificar los colores para el texto cuando es normal, está presionado y enfocado.

+0

Para las personas que se refieren esta página a través de la búsqueda, hacer referencia a mi respuesta si usted está buscando para utilizar los colores y no 'ColorStateList'. Mi solución funciona sin escribir ningún código en Java :) –

Respuesta

52

Si desea ajustar el color con estado de código, tiene que pasar en ColorStateList como argumento para setTextColor pasar un int a los resultados del método para establecer el color a toda la estados. También parece que tu xml no es totalmente correcto. Ejemplo de documentos ColorStateList parece (debe estar ubicado como esto: 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 sobre cómo configurar un ColorStateList a color del texto:

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

Con XML su tan fácil como:

android:textColor="@color/selector_txt" 
+1

Cambié mi archivo XML a lo que sugirió, e investigué cómo se suponía que debía enviar una ColorStateList en el método setTextColor. Y encontré esta publicación útil: http://www.anddev.org/post27828.html#p27828 Así que ahora todo está funcionando correctamente. :) Sin embargo, necesito modificar un poco los estados en el documento xml. –

+0

@Daniel Jonsson He agregado el código de la publicación a la respuesta, por lo que sería más fácil para otra persona. –

+0

@ Konstantin Burov: +1 y gracias, su respuesta me ayudó ... –

10

Mire en la clase R.java (se genera automáticamente). Usted tiene algo así:

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

Así que en su código en línea:

title.setTextColor(R.color.textcolor); 

usted no está estableciendo valores de textcolor.xml pero int de R.java (que contiene la dirección textcolor.xml) La forma válida para establecer el color es:

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

¡Muchas gracias por su ayuda! Ahora realmente lee los colores del archivo. :) Sin embargo, sigo teniendo un problema. Simplemente lee el color predeterminado. El color no cambiará si hago clic en el texto, lo cual es extraño. ¿Sabes qué lo hace? –

+3

Debe ser 'getResources(). GetColorStateList', no' getResources(). GetColor'. – Patrick

+0

@Patrick sí, getResources(). GetColorStateList realmente funciona. – anticafe

39

Paso 1: Establecer el color del texto en XML como esto

androide: textColor = "@ Color/text_color"

Paso 2: Crear 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> 
+0

no funciona en absoluto – AlwaysConfused

+0

@ SiempreConfuso, ¿por qué? ¿Qué es un dispositivo, versión del sistema operativo? – CoolMind

15

Prueba con esto .. Se trabajó para mí:

Nombre de archivo: 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> 

intente configurar el color en el diseño xml como:

android:textColor="@color/bg_tab_text_color" 
+0

Tiempo guardado. trabajando bien. – Ganesh

3

Es muy easy.Try este .. Se trabajó para mí:

Nombre del archivo: 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" /> 

intente configurar el color en el diseño xml como:

android:textColor="@color/bg_tab_text_color" 
0

En res/estirable/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" /> 
0

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

En el diseño:

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

En código:

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