button的點(diǎn)擊效果學(xué)習(xí)起來(lái)事實(shí)上比較容易拾徙,此點(diǎn)對(duì)開發(fā)者來(lái)說(shuō)也是使用的比較頻繁的一個(gè)知識(shí)點(diǎn),與它相關(guān)的還有編輯框的獲取焦點(diǎn)時(shí)改變背景顏色凰萨、選擇button選擇時(shí)改變字體顏色等等绑警。這些其實(shí)都是用到的drawable的seletor奉狈。
效果:(不點(diǎn)擊時(shí)顯示白色鳖昌,點(diǎn)擊時(shí)顯示灰色)
實(shí)現(xiàn)這個(gè)效果其實(shí)很簡(jiǎn)單备畦,在drawable中創(chuàng)建一個(gè)xml文件低飒,然后輸入兩行代碼即可解決,如圖simple_button_style.xml:
<?xml version="1.0" encoding="utf-8"?> ?
<selector xmlns:android="http://schemas.android.com/apk/res/android"> ?
? ? <item android:state_pressed="true" android:drawable="@android:color/darker_gray"/> ?
? ? <item android:drawable="@android:color/white"/> ?
</selector> ?
第一行表示點(diǎn)擊時(shí)顯示的圖片,第二行表示初始狀態(tài)顯示的圖片懂盐。
然后直接在layout文件中button的background中設(shè)置這個(gè)xml文件即可,代碼如下:
activity_main:
<?xml version="1.0" encoding="utf-8"?> ?
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ?
? ? android:layout_width="match_parent" ?
? ? android:layout_height="match_parent" ?
? ? android:fitsSystemWindows="true" ?
> ?
? ? <Button ?
? ? ? ? android:layout_width="match_parent" ?
? ? ? ? android:layout_height="wrap_content" ?
? ? ? ? android:text="button測(cè)試" ?
? ? ? ? android:background="@drawable/simple_button_style" ?
? ? ? ? /> ?
</LinearLayout> ?
常見問題:
在selector中設(shè)置了點(diǎn)擊效果和初始狀態(tài)效果時(shí)褥赊,點(diǎn)擊卻沒有反應(yīng),錯(cuò)誤效果以及代碼如下:
這里就涉及到seletor選擇圖片的機(jī)制了俐银。一旦選擇到了合適的圖片尿背,那么就不會(huì)進(jìn)行之后的判斷了。
拿正確的代碼舉例來(lái)說(shuō)捶惜,首先是判斷button是否有被點(diǎn)擊残家,如果沒有,就不顯示灰色售躁,往下繼續(xù)選擇,然后就到了第二行茴晋,第二行提供的背景為白色陪捷,即顯示白色。
在錯(cuò)誤的代碼中诺擅,第一行沒有條件市袖,即直接選擇白色,跳出選擇烁涌,就不會(huì)進(jìn)行之后是否有被點(diǎn)擊的判斷苍碟,所以點(diǎn)擊效果不會(huì)顯示。