2012年9月28日 星期五

Android程式設計 - 使用ColorStateList

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