Estoy leyendo algunos datos de una API REST y necesito generar algunos botones basados en la información que recibe la aplicación.Android - Cómo establecer programáticamente color de botón
Como necesito los mismos botones en muchas pantallas de Actividad, he extendido el Botón para hacer un RachelButton y lo configuré en el constructor.
public RachelButton(Context context, Info info) {
super(context);
this.info= info;
setText(info.getTime());
setTypeface(Typeface.DEFAULT, Typeface.BOLD);
int identifier = 0;
if(info.isAvailable()){
identifier = getContext().getResources().getIdentifier("drawable/info_button_"+info.getType(), null, getContext().getPackageName());
}else{
identifier = R.drawable.info_button_unavailable;
}
if(identifier == 0){
Log.e("INFO_BUTTON", "no button for "+info.getType());
}
setBackgroundResource(identifier);
setTextColor(R.color.info_button_text_color);
setOnClickListener(new View.OnClickListener(){
public void onClick(View view) {
//do stuff
}
});
}
A continuación, un ejemplo de recurso que estoy utilizando para generar un botón de color es la siguiente:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" >
<shape>
<gradient
android:startColor="@color/button_pressed"
android:endColor="@color/button_pressed"
android:angle="270" />
<stroke
android:width="3dp"
android:color="@color/button_pressed" />
<corners
android:radius="3dp" />
<padding
android:left="5dp"
android:top="5dp"
android:right="5dp"
android:bottom="5dp" />
</shape>
</item>
<item android:state_focused="true" >
<shape>
<gradient
android:endColor="@color/info_normal"
android:startColor="@color/info_normal"
android:angle="270" />
<stroke
android:width="3dp"
android:color="@color/info_normal" />
<corners
android:radius="3dp" />
<padding
android:left="5dp"
android:top="5dp"
android:right="5dp"
android:bottom="5dp" />
</shape>
</item>
<item>
<shape>
<gradient
android:endColor="@color/info_normal"
android:startColor="@color/info_normal"
android:angle="270" />
<stroke
android:width="3dp"
android:color="@color/info_normal" />
<corners
android:radius="3dp" />
<padding
android:left="5dp"
android:top="5dp"
android:right="5dp"
android:bottom="5dp" />
</shape>
</item>
</selector>
Como se puede ver en el código estoy fijando el color del texto y estoy seguro de que este color existe como recurso (gracias IntelliJ).
Pero establecer el color del texto de esta manera no tiene ningún efecto, el color del texto en el botón parece ser un tono más oscuro del color de fondo del botón.
Si alguien me puede dar algunos consejos sobre qué probar a continuación, le agradecería mucho.
Usted debe echar un vistazo a los temas y estilos Android. Permiten aplicar el mismo aspecto y tacto a uno, más o todos los elementos de la interfaz de usuario de varios tipos. –
Acabo de comenzar a leer sobre eso. – Rachel