selector實現按鈕選中高亮效果原理
阿新 • • 發佈:2019-01-02
按鈕選中高亮常規程式碼如下:
<?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)來實現按鈕按下後處於選中/非選中的狀態。