爲Button設置多種狀態的selector
- 描述:有時候button需要有多種不同的狀態對應不同的背景,如正常狀態下顏色是紫色,但按下狀態是綠色,不可點狀態是灰色,對應的三種不同背景顏色。
- 實現:要實現按鈕按下狀態,可點狀態,對應狀態下不同的顏色,需要爲selector設置三個item來對應不同狀態,以實現不同背景顏色。
- 直接上動圖,效果如下:
以下是各個狀態下button所需要設置的背景顏色
事件 | 狀態 | 顏色 |
---|---|---|
pressed | true | 綠 |
pressed | false | 紫 |
enable | true | 紫 |
enable | false | 灰 |
selector item對應的顏色
pressed | enable | color |
---|---|---|
true | true | 綠 |
false | true | 紫 |
true | false | 灰 |
false | false | 灰 |
注意點:
- 當控件不可點的時候,肯定是爲灰色的,這裏的selector第一項應該爲控件不可點時的對應選項。
- 因爲selector是按照item順序來進行判斷的,如果有一項符合則退出selector,不再進行下面item項的判斷。
selector代碼如下
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_enabled="false"
android:drawable="@drawable/shape_bg_button_no_enable"
/>
<item
android:state_pressed="false"
android:drawable="@drawable/shape_bg_button_unpress"
/>
<item
android:state_pressed="true"
android:drawable="@drawable/shape_bg_button_onpress"
/>
</selector>
shape佈局如下
1.button不可點狀態:shape_bg_button_no_enable
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<!-- 圓角半徑 -->
<corners android:radius="200dp" />
<!-- 填充顏色 -->
<solid android:color="@android:color/holo_blue_light"/>
<!-- 線的寬度,顏色灰色 -->
<stroke android:width="1dp"
android:color="#fff"
/>
</shape>
- 1
2.button正常狀態,可點未按下:shape_bg_button_unpress
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<!-- 圓角半徑 -->
<corners android:radius="200dp" />
<!-- 填充顏色 -->
<solid android:color="@android:color/holo_purple"/>
<!-- 線的寬度,顏色灰色 -->
<stroke android:width="2dp"
android:color="#fff"
/>
</shape>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 92
3.button可點按下狀態:shape_bg_button_onpress
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<!-- 圓角半徑 -->
<corners android:radius="200dp" />
<!-- 填充顏色 -->
<solid android:color="@android:color/holo_green_light"/>
<!-- 線的寬度,顏色灰色 -->
<stroke android:width="2dp"
android:color="@android:color/holo_orange_dark"
/>
</shape>
- 1
- 2
- 12