Android – 如何以编程方式设置button的颜色

我正在阅读一些REST API中的数据,需要根据应用程序收到的信息生成一些button。

因为我需要在许多活动屏幕中的相同的button,我已经扩展button来做一个RachelButton,我在构造函数中设置它。

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 } }); } 

然后,我用来生成一个彩色button的资源的一个例子是这样的:

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

正如你可以在代码中看到的,我设置文本的颜色,我确信这个颜色作为一个资源存在(谢谢IntelliJ)。

但是,像这样设置文本颜色根本没有任何效果,button上的文本颜色似乎是button背景颜色的较暗阴影。

如果有人可以给我一些build议,接下来要做什么,我会非常感激。

Solutions Collecting From Web of "Android – 如何以编程方式设置button的颜色"

你应该做:

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

如果你有View对象(来自R类的findViewById )转换信息的特定对象,例如Button,那更好。 (标准方式 – Button b = (Button) fin...(R.id.sdfsdf)

接下来只需input几个andro-colors:

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

或者BETTER:FROM RGB

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

一切都在Eclipse中的ctrl+spaceBar :P


抱歉! 也许b.setTextColor(0xff0000)也可以工作…

getColor()函数已从API级别23弃用。请查看此链接了解更多详细信息。
以下是支持库的源代码:

 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); } }