Selector可以用來定義一個元件在不同狀態使用的外觀及顏色。selector是一個xml檔,可以用來結合shape,在shape中定義想呈現的效果後,在selector中與狀態綁定,在不同的操作狀態下,可改變元件的外觀。
常見的狀態如下幾種:
1.state_pressed 表示元件被按下時套用
2.state_focused 表示元件獲得焦點時套用
3.state_selected 表示元件被選中時套用
4.state_checked 表示元件被勾選時套用
5.state_enabled 表示元件是否被系統實例化時套用
本章延續上篇文章中的shape內容,先以shape建立兩個xml檔(button_shape、button_shape2):
button_shape:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<corners
android:radius="15dp"
/>
<gradient
android:angle="45"
android:centerX="35%"
android:centerColor="#D7C4BB"
android:startColor="#6699A1"
android:endColor="#91989F"
android:type="linear"
/>
<padding
android:left="0dp"
android:top="0dp"
android:right="0dp"
android:bottom="0dp"
/>
<size
android:width="250dp"
android:height="50dp"
/>
<stroke
android:width="3dp"
android:color="#BDC0BA"
/>
</shape>
button_shape2:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<corners
android:radius="15dp"
/>
<gradient
android:angle="45"
android:centerX="35%"
android:centerColor="#000000"
android:startColor="#6699A1"
android:endColor="#91989F"
android:type="linear"
/>
<padding
android:left="0dp"
android:top="0dp"
android:right="0dp"
android:bottom="0dp"
/>
<size
android:width="250dp"
android:height="50dp"
/>
<stroke
android:width="3dp"
android:color="#BDC0BA"
/>
</shape>
接下來以Selector建立一個xml檔,這邊以Button被按下時的狀態來介紹:
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
//按下時
<item android:state_pressed="true"
android:drawable="@drawable/button_shape" />
//初始狀態
<item android:drawable="@drawable/button_shape2" />
</selector>
初始狀態:
按下時:
此外,這邊附上其他狀態的寫法:
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
//表示元件獲得焦點時套用
<item android:state_pressed="true"
android:drawable="@drawable/button_shape2"/>
//表示元件獲得焦點時套用
<item android:state_focused="true"
android:drawable="@drawable/button_shape2"/>
//表示元件被選中時套用
<item android:state_selected="true"
android:drawable="@drawable/button_shape2"/>
//表示元件被勾選時套用
<item android:state_checked="true"
android:drawable="@drawable/button_shape2"/>
//表示元件是否被系統實例化時套用
<item android:state_enabled="true"
android:drawable="@drawable/button_shape2"/>
</selector>
selector與shape都建立成功後我們回到activity_main.xml中,利用元件的background屬性綁定樣版:
<Button
android:id="@+id/button"
android:background="@drawable/button_selector"
app:backgroundTint="@null"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="Button" />