1. 程式人生 > >selector實現按鈕選中高亮效果原理

selector實現按鈕選中高亮效果原理

按鈕選中高亮常規程式碼如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
        android:drawable="@drawable/background_pressed">
    <item android:state_selected="true"
        android:drawable="@drawable/background_pressed">
    <item android:state_enabled="true"
        android:drawable="@drawable/background_normal">
</selector>


通常情況下View可使用的包括state_enabled, state_selected, state_pressed, state_focused, state_hovered等等諸多狀態,state_selected就是其中一個。

而對於一個按鈕來說,正常情況下state_selected屬性對它不起作用,state_selected一般用於ListView之類可以選中Item之類的控制元件。那麼這裡是如何利用state_selected屬性來實現選中高亮效果的?

看到上面的程式碼,首先,state_pressed狀態在手指觸控中它的屬性值為true,自然顯示的圖片是@drawable/background_pressed,但當我們的手指離開螢幕或相應按鈕區域時,state_pressed屬性的值即變為false。故此時第一個Item不匹配,系統隨即往下匹配其他的Item(匹配的順利從上到下進行)。若沒有第2個Item的話,將匹配到我們的第3個Item,即顯示為正常的圖片@drawable/background_normal,但我們這裡第2個Item放了一個state_selected屬性匹配的圖片。因此,程式中我們可以通過呼叫setSelected(true)/setSelected(false)來實現按鈕按下後處於選中/非選中的狀態。