2011-01-14 30 views
205

hice un botón que cambia el dibujable fondo en diferentes estados, de esta manera:Botón personalizado de Android; cambiar el color del texto

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true" android:drawable="@drawable/btn_location_pressed" /> <!-- pressed --> 
<item android:state_focused="true" android:drawable="@drawable/btn_location_pressed"/> <!-- focused --> 
<item android:drawable="@drawable/btn_location"/> <!-- default --> 

El problema aquí es que yo también estoy tratando de cambiar el textColor como hago con el dibujable, pero no puedo. Ya probé con android: textColor y android: color pero el primero no funciona mientras los segundos cambian mi fondo.

El siguiente código es parte de mi diseño. En cuanto al color de texto sólo funciona para el color del texto estado normal, por lo tanto no la cambia por el blanco uno mientras presiona

<Button android:id="@+id/location_name" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:paddingTop="5dp" 
     android:background="@drawable/location"   
     android:textSize="15sp" 
     android:textColor="@color/location_color" 
     android:textColorHighlight="#FFFFFF" 
    /> 

nadie tiene una pista?

Respuesta

497

crear un color de estado de este botón, igual que lo hizo para el fondo, por ejemplo:

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

Coloque el XML en un archivo en res/dibujable carpeta es decir, res/estirable/button_text_color.xml. A continuación, acaba de establecer el dibujable como el color del texto:

android:textColor="@drawable/button_text_color" 
+13

Tenga en cuenta que (para mí, al menos) hay un error donde debe colocarse el estado "normal" ( en su respuesta) al final del archivo como en tu respuesta. Al colocar el estado normal en la parte superior del archivo (por encima de los otros estados) se detiene el selector de trabajo. –

+51

no es un error. Es la forma en que se supone que la selección de estado funciona. No es la mejor combinación, sino la primera que encaja. – superjos

+0

¿Cómo hacer esto con un valor entero? Estoy tratando de hacer algo similar con el relleno de texto. – elimirks

14

Otra manera de hacerlo es en su clase:

import android.graphics.Color; // add to top of class 

Button btn = (Button)findViewById(R.id.btn); 

// set button text colour to be blue 
btn.setTextColor(Color.parseColor("blue")); 

// set button text colour to be red 
btn.setTextColor(Color.parseColor("#FF0000")); 

// set button text color to be a color from your resources (could be strings.xml) 
btn.setTextColor(getResources().getColor(R.color.yourColor)); 

// set button background colour to be green 
btn.setBackgroundColor(Color.GREEN); 
+1

Esto cambiará el color del texto en el botón, pero permanecerá en ese color durante los diferentes estados del botón (por ejemplo, presionado). En la mayoría de los escenarios, cuando el color de fondo de un botón cambia durante un estado, también se desea cambiar el color del texto del botón, aquí es donde la respuesta de @Konstantin Burov es útil. –

+0

esto no configurará colores diferentes para cada estado ... –

+0

Esto no responde la pregunta original. La pregunta es acerca de cómo definir colores basados ​​en el estado para una vista de texto de la misma manera en que puede establecer los objetos dibujables basados ​​en el estado. – alchemist

1

Cambiar el color del texto del botón

Debido a que este método se considera obsoleto

button.setTextColor(getResources().getColor(R.color.your_color)); 

Yo uso lo siguiente:

button.setTextColor(ContextCompat.getColor(mContext, R.color.your_color)); 
2

bien muy simple por primera vez a 1.-res valuse y colors.xml abierta 2.Copia 1 del texto definido por ejemplo sus # FF4081 y cambiar el nombre, por ejemplo, he cambiado a blanco y el cambio su valor, por ejemplo, i cambiado a #FFFFFF para el valor blanco como esto

<color name="White">#FFFFFF</color> 

continuación, dentro de su botón de añadir esta línea

b3.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.White)); 

ok b3 es el nombre de mi botón, así que cambié el nombre de tu botón; todos los demás serán iguales si utilizas el color blanco si cambias de color y cambias el color al nombre de tu color, pero primero has definido ese color en colores .xml como expliqué en pont 2

Cuestiones relacionadas