Search

Android - 修改 Button 與 ListView, RecyclerView Item 的背景與點擊效果顏色

2015-09-06 1:31 PM

若直接使用 background 屬性修改按鈕等物件的背景顏色時通常無法保留點擊效果

如 android:background="#333333" 雖然修改了背景顏色

點擊觸發的預設動畫卻也跟著不見了

但其實是有辦法可以保留並自訂點擊特效的顏色

不論是背景顏色還是點擊效果的顏色都可以修改

方法就是將以下 xml 設定新增到 drawable 目錄底下即可

套用方式則是修改 background 屬性值

android:background="@drawable/YOUR_DRAWABLE_FILE_NAME"

程式碼範例

我們先看 API 21 以上的版本修改方式

新增一個 drawable 的 Resource

並將內容修改為以下 xml 格式

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="@color/main_login_button_ripple">
    <item android:drawable="@color/main_login_button_background"/>
</ripple>

@color/main_login_button_ripple 為點擊後效果的顏色 可自行在 color.xml 設定

@color/main_login_button_background 為按鈕背景顏色 可自行在 color.xml 設定


API 20 以下的版本則要使用以下格式的 xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/main_login_button_ripple" android:state_pressed="true"/>
    <item android:drawable="@color/main_login_button_ripple" android:state_focused="true"/>
    <item android:drawable="@color/main_login_button_background"/>
</selector>

@color/main_login_button_ripple 為點擊後效果的顏色 可自行在 color.xml 設定

@color/main_login_button_background 為按鈕背景顏色 可自行在 color.xml 設定


所以其實就是自訂兩個 color 參數

分別給背景與特效使用即可

當然此方法也可以自訂背景的形狀 例如加上圓角

方法跟 layer-list 相同

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="@color/fav_item_ripple">
    <item>
        <shape>
            <solid android:color="@color/fav_item_background"></solid>
            <corners android:radius="10px"></corners>
        </shape>
    </item>
</ripple>
各項資料連結
Drawable Resources

No comments:

Post a Comment