我正在閱讀REST api中的某些數據,並需要根據應用程序接收的信息生成一些按鈕。Android - 如何以編程方式設置按鈕顏色
因爲我需要在很多Activity屏幕中使用相同的按鈕,所以我擴展了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)。
但是,像這樣設置文本顏色根本沒有效果,按鈕上的文本顏色似乎是按鈕背景顏色的較暗陰影。
如果有人可以給我一些建議,接下來要做什麼,我會非常感激。
你應該看看Android的主題和風格。它們允許您將相同的外觀和感覺應用於各種類型的一個,多個或所有UI元素。 – 2010-07-26 10:50:46
我剛開始閱讀。 – Rachel 2010-07-26 12:38:11