如何在安卓中设置带有涟漪效果的按钮背景可绘制图像

10

我的 Xml 代码:

<Button
    android:id="@+id/link_btn"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/google_btn" />

我正在应用默认的涟漪效果

<Button
    android:id="@+id/link_btn"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?android:attr/selectableItemBackground" />

但我需要一个带有自定义背景"@drawable/google_btn"且具有波纹效果的按钮,需要使用"?android:attr/selectableItemBackground"属性。


我该如何做到这一点? - Prithiv Dharmaraj
值得强调的是(正如@zahidul所提到的),涟漪效果仅适用于Android v21及以上版本。 - user1506104
4个回答

14
在你的drawable-v21文件夹中,你可以自己编写涟漪效果的代码。创建一个可绘制的xml文件,并使用ripple标记设置起始标记,就像这样:
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/colorAccentDark">
    <item>
        <selector xmlns:android="http://schemas.android.com/apk/res/android" >
            <item
                android:drawable="@color/button_accent_dark"
                android:state_checked="false"/>
            <item
                android:drawable="@color/button_accent"
                android:state_checked="true" />
            <item
                android:drawable="@color/button_accent_dark" />

        </selector>
    </item>
</ripple>

谢谢@Zahidul Islam.. 这个方法有效,还有一个问题,我如何在V21以下应用涟漪效果? - Prithiv Dharmaraj

10

当按钮具有drawable背景时,我们可以将ripple效果添加到前景参数中。检查下面的代码,它适用于我的具有不同背景的按钮

当按钮具有drawable背景时,我们可以将涟漪效果添加到前景参数中。请检查以下代码,它能够适用于我的带有不同背景的按钮。

<Button
android:layout_width="wrap_content"
android:layout_height="40dp"
android:gravity="center"
android:layout_centerHorizontal="true"                                                             
android:background="@drawable/shape_login_button"
android:foreground="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:text="@string/action_button_login"
 />
添加以下参数以启用涟漪效果。
android:foreground="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:focusable="true"

5
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:colorControlHighlight" >

    <item
        android:id="@android:id/mask"
        android:drawable="@drawable/btn_rectangle"/>
    <item android:drawable="@drawable/btn_rect_states"/>

</ripple>

在可绘制对象(drawables)中尝试以上代码并根据需要设定自定义的绘制对象背景。


1
很好,在v21以下版本中,涟漪效果不起作用,因此您需要为正常状态和按下状态创建按钮状态的选择器文件。@PrithivDharmaraj..如果我的答案有帮助,请接受或点赞。 - Preetika Kaur

4

另一个选项是创建一个图层列表( layer list ) drawable 并将其设置为背景。例如:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/button_background"/>
    <item android:drawable="?attr/selectableItemBackground"/>
</layer-list>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接