在Android中設定元件顏色值時,有些情況下並不是只有單一顏色,而要與元件狀態關聯;例如按鈕按下時與放開後要使用不同顏色,這種情況就需要使用ColorStateList。
首先定義顏色,例如res/drawable/tab_color.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- When selected -->
< tem android:state_selected="true" android:color="#000000" />
<!-- When not selected -->
<item android:state_selected="false" android:color="#CFCFCF" />
<!-- When pressed -->
<item android:state_pressed="true" android:color="#FF0000" />
</selector>
程式中可透過以下方式建立ColorStateList,再設定到元件上。
TextView tv = (TextView) tabWidget.getChildAt(i).findViewById(android.R.id.title);
try {
XmlResourceParser parser = getResources().getXml(R.drawable.tab_color);
ColorStateList colors;
colors = ColorStateList.createFromXml(getResources(), parser);
tv.setTextColor(colors);
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}