我們在定義一個drawable的時候可以通過xml定義的drawable對象。它使得一個圖檔能在不同的狀态下顯示不同的圖案,比如一個Button,它有pressed,focused,或者其它狀态,通過使用state list drawable,你就可以為每種狀态提供不同的圖檔。
例如:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/efax_tab_inbox_disabled" android:state_enabled="false"/>
<item android:drawable="@drawable/efax_tab_inbox_p" android:state_selected="true"/>
<!--這樣被按下後就會切換為另一張圖檔--!>
<item android:drawable="@drawable/efax_tab_inbox_p" android:state_pressed="true"/>
<item android:drawable="@drawable/efax_tab_inbox"/>
</selector>
各屬性解釋如下:
android:drawable 放一個drawable資源
android:state_pressed 是否按下,如一個按鈕觸摸或者點選。
android:state_focused 是否取得焦點,比如使用者選擇了一個文本框。
android:state_hovered 光标是否懸停,通常與focused state相同,它是4.0的新特性
android:state_selected 被選中,它與focus state并不完全一樣,如一個list view 被選中的時候,它裡面的各個子元件可能通過方向鍵,被選中了。
android:state_checkable 元件是否能被check。如:RadioButton是可以被check的。
android:state_checked 被checked了,如:一個RadioButton可以被check了。
android:state_enabled 能夠接受觸摸或者點選事件
android:state_activated 被激活(這個麻煩舉個例子,不是特明白)
android:state_window_focused 應用程式是否在前台,當有通知欄被拉下來或者一個對話框彈出的時候應用程式就不在前台了
注意:如果有多個item,那麼程式将自動從上到下進行比對,最先比對的将得到應用。(不是通過最佳比對)
如果一個item沒有任何的狀态說明,那麼它将可以被任何一個狀态比對。
在activity裡可以設定按鈕的狀态
mBtn_efax_received.setSelected(true);
mBtn_efax_failed.setSelected(false);
mBtn_efax_sent.setSelected(false);
mBtn_efax_recycle.setSelected(false);
設定小圓點消息數提示:
<ImageButton
android:id="@+id/imgbtn_inbox"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_margin="2dp"
android:background="@drawable/selector_efax_tab_inbox"
/>
<TextView
android:id="@+id/efax_main_textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="10dp"
android:layout_alignParentTop="true"
android:layout_marginTop="10dp"
android:background="@drawable/indicator_xml"
android:gravity="center_horizontal"
android:text="88"
android:textColor="@color/white"
android:textIsSelectable="false"
android:textSize="15sp"
android:visibility="gone" />
</RelativeLayout>
建立一個drable
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android= "http://schemas.android.com/apk/res/android"
android:shape= "oval"
android:useLevel= "false" >
<solid android:color= "#c6001d" />
<stroke
android:width= "1dp"
android:color= "#c6001d" />
<size android:width= "20dp"
android:height= "20dp" />
</shape>
參考:
http://www.oschina.net/question/920274_212245