我正在从REST API中读取一些数据,需要根据应用程序收到的信息生成一些按钮。
因为我在许多活动屏幕中需要相同的按钮,所以我扩展了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
}
});
}
然后我用来生成彩色按钮的资源示例如下:
<?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)。
但是设置这样的文字颜色根本没有效果,按钮上的文字颜色似乎是按钮背景颜色的深色。
如果有人能给我一些关于下一步尝试的建议,我将非常感激。
答案 0 :(得分:43)
答案 1 :(得分:3)
如果你有View对象(来自R类的findViewById
)变换了信息特定对象,那就更好了:例如Button。 (标准方式 - Button b = (Button) fin...(R.id.sdfsdf)
)
接下来只需输入一些andro-colors:
b.setTextColor(Color.parseColor("green"));
或更好:从RGB
b.setTextColor(Color.rgb(0xff, 0x66, 0x33));
所有东西都在Eclipse中的ctrl+spaceBar
:P
抱歉!也许b.setTextColor(0xff0000)
也可行......
答案 2 :(得分:0)
从API级别23不推荐使用getColor()函数。有关详细信息,请查看此link
以下是支持库的源代码:
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);
}
}