1. 程式人生 > >Android 自定義帶點選效果的圓角按鈕

Android 自定義帶點選效果的圓角按鈕

在開發過程中, 經常會用到一些帶點選效果的自定義圓角按鈕,特寫一篇部落格來記錄一下如何利用selector和shape組合的方式來實現。

現在res/drawable資料夾下建立一個新的btn_normal.xml 檔案,檔案型別選擇 shape,根據檔名稱就可判斷建立的檔案為按鈕正常時的背景。

<?xml version="1.0" encoding="utf-8"?>
<!-- shape的預設形狀是rectangle,還有oval(橢圓),line(線),ring(圓環)-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"> <!-- 矩形的圓角弧度 --> <corners android:radius="10dp"/> <!-- 矩形的填充色 --> <solid android:color="#FFFFFF"/> <!-- 矩形的內邊距 --> <padding android:left="5dp" android:right="5dp" android:top="5dp" android:bottom="5dp"/> <!-- 矩形的邊框的寬度 和 顏色 --> <stroke
android:width="1dp" android:color="#BEBEBE"/> </shape>
在建立一個btn_pressed.xml檔案,該檔案時按鈕按下時的背景。
<?xml version="1.0" encoding="utf-8"?>
<!-- shape的預設形狀是rectangle,還有oval(橢圓),line(線),ring(圓環)-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- 
矩形的圓角弧度 --> <corners android:radius="10dp"/> <!-- 矩形的填充色 --> <solid android:color="#53FF53"/> <!-- 矩形的內邊距 --> <padding android:left="5dp" android:right="5dp" android:top="5dp" android:bottom="5dp"/> <!-- 矩形的邊框的寬度 和 顏色 --> <stroke android:width="1dp" android:color="#BEBEBE"/> </shape>
關於shape檔案的更多用法 可以參照下面的圖片


  然後在drawable目錄下新建一個btn_selector.xml檔案,檔案型別選擇selector,這個檔案的作用是當按鈕正常沒有被按下的時候顯示一個背景,按下的時候則顯示另外一個顏色的背景。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Button正常狀態下的背景 -->
<item android:drawable="@drawable/btn_normal" android:state_pressed="false"/>
<!-- Button被按住狀態下的背景 -->
<item android:drawable="@drawable/btn_pressed" android:state_pressed="true"/>
</selector>
此時在button  的 背景加上這個xml檔案就可以了。
android:background="@drawable/btn_selector"
下面介紹一些selector中的一些item中的屬性:

android:state_pressed 是否按下,如一個按鈕觸控或者點選(可以設定按下一個顏色,擡起是另一種顏色)。
android:state_focused 是否取得焦點,比如使用者選擇了一個文字框。
android:state_hovered 游標是否懸停,通常與focused state相同,它是4.0的新特性
android:state_selected 被選中,它與focus state並不完全一樣,如一個list view 被選中的時候,它裡面的各個子元件可能通過方向鍵,被選中了。
android:state_checkable 元件是否能被check。如:RadioButton是可以被check的。
android:state_checked 被checked了,如:一個RadioButton可以被check了。
android:state_enabled 能夠接受觸控或者點選事件
android:state_activated 被啟用
android:state_window_focused 應用程式是否在前臺,當有通知欄被拉下來或者一個對話方塊彈出的時候應用程式就不在前臺了。