Botón personalizado de Android; cambiando el color del texto
Hice un botón que cambia el fondo dibujable en diferentes estados, de esta manera:
<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 -->
</selector>
El problema aquí es que también estoy intentando cambiar el color del texto como lo hago con el dibujable, pero no puedo. Ya probé android:textColor y android:color pero el primero no funciona mientras que el segundo cambia mi fondo.
El siguiente código es parte de mi diseño. En cuanto al color del texto, solo funciona para el color del texto en estado normal, por lo que no cambia al blanco mientras se 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"
/>
¿Alguien tiene alguna pista?
Cree un color con estado para su botón, tal como lo hizo para el fondo, por ejemplo:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Focused and not pressed -->
<item android:state_focused="true"
android:state_pressed="false"
android:color="#ffffff" />
<!-- Focused and pressed -->
<item android:state_focused="true"
android:state_pressed="true"
android:color="#000000" />
<!-- Unfocused and pressed -->
<item android:state_focused="false"
android:state_pressed="true"
android:color="#000000" />
<!-- Default color -->
<item android:color="#ffffff" />
</selector>
Coloque el xml en un archivo en la carpeta res/drawable, es decir, res/drawable/button_text_color.xml. Luego simplemente configura el dibujable como color de texto:
android:textColor="@drawable/button_text_color"
Otra forma de hacerlo es en tu 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);
ok, muy simple, primero vaya a 1. res-valuse y abra colores.xml 2. copie 1 del texto definido, por ejemplo #FF4081 y cambie el nombre, por ejemplo, cambié a blanco y cambie su valor, por ejemplo, cambié a #FFFFFF para valor blanco como este
<color name="White">#FFFFFF</color>
luego dentro de tu botón agrega 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 su botón, todos los demás serán iguales si usa el color blanco, si cambia un color diferente, luego cambie el blanco al nombre de su color, pero primero debe definir ese color en colores. xml como lo expliqué en el punto 2
Cambiar el color del texto del botón
Porque este método ahora está en desuso
button.setTextColor(getResources().getColor(R.color.your_color));
Yo uso lo siguiente:
button.setTextColor(ContextCompat.getColor(mContext, R.color.your_color));