Cómo configurar el color del botón mediante programación

Estoy leyendo algunos datos de una api de REST y necesito generar algunos botones basados ​​en la información que la aplicación recibe.

Debido a que necesito los mismos botones en muchas pantallas de actividad, he extendido el botón para hacer un RachelButton y lo he configurado 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 del recurso que estoy utilizando para generar un botón de color es el 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 configurando el color del texto y estoy seguro de que este color existe como un recurso (gracias IntelliJ).

Pero establecer el color del texto como este no tiene ningún efecto en absoluto, el color del texto en el botón parece ser un tono más oscuro del color de fondo del botón.

Si alguien pudiera darme algún consejo sobre qué probar a continuación, sería muy agradecido.

Deberías hacer:

 setTextColor(getContext().getResources().getColor(R.color.info_button_text_color)); 

Mejor si tiene el objeto View ( findViewById de la clase R) objeto específico de información transformado: por ejemplo Button. (La forma estándar – Button b = (Button) fin...(R.id.sdfsdf) )

A continuación, solo escriba de unos cuantos andro-colores:

  b.setTextColor(Color.parseColor("green")); 

O MEJOR: DE RGB

  b.setTextColor(Color.rgb(0xff, 0x66, 0x33)); 

Todo está en la ctrl+spaceBar en Eclipse: P


¡Lo siento! Tal vez el b.setTextColor(0xff0000) también funciona …

La función getColor () está obsoleta del nivel API 23. Consulte este enlace para obtener más detalles.
A continuación se muestra el código fuente de la biblioteca de soporte:

 public static final int getColor(Context context, int id) { final int version = Build.VERSION.SDK_INT; if (version >= 23) { return ContextCompatApi23.getColor(context, id); } else { return context.getResources().getColor(id); } } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.