38

我想在按钮上使用波纹效果。AppCompat v22.1 为 AppCompat 着色添加了 AppCompatButton 和新功能。

我的布局:

<android.support.v7.widget.AppCompatButton
        android:id="@+id/add_remove_button"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:backgroundTint="@color/primary"
        android:textColor="@android:color/white"
        android:text="Remove" />

在我的 API 22 测试设备上,涟漪效果完美运行,但我正在为 API 11 编码,不幸的是 backgroundTint 需要 API >= 21。如何在旧 API 版本上将涟漪效果设置为按钮?

4

4 回答 4

110

只需使用app:backgroundTint代替android:backgroundTint,色调将在棒棒糖下方生效。原因是AppCompatActivity AppCompatDelegateImplV7用于AppCompatViewInflater将Button或TextView自动更改为AppCompatButton或AppCompatTextView,然后app:backgroundTint生效。

在此处输入图像描述

于 2016-07-13T15:09:56.837 回答
2

涟漪图不能作为 Android <21 上的内置功能使用。这是由于性能问题:具有新 API 的设备可以使用旧设备不可用的 RenderThread。另见:http ://android-developers.blogspot.de/2014/10/appcompat-v21-material-design-for-pre.html

为什么pre-Lollipop上没有涟漪?很多让 RippleDrawable 顺利运行的原因是 Android 5.0 的新 RenderThread。为了优化以前版本的 Android 的性能,我们暂时不使用 RippleDrawable。

于 2015-04-28T13:02:17.527 回答
1

要支持 API 21 以下的波纹功能,您可能必须在按钮的背景中添加可绘制对象:

<android.support.v7.widget.AppCompatButton
    android:id="@+id/add_remove_button"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/button_ripple"
    android:backgroundTint="@color/primary"
    android:textColor="@android:color/white"
    android:text="Remove" />

然后,您必须在 drawable 和 drawable-v21 目录中添加具有相同名称的 xml(如果您没有它们,您可以创建它们,它们将被自动链接)。

/res/drawable-v21/button_ripple.xml

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/white">
    <item>
        <shape>
            <solid android:color="@color/white" />
        </shape>
    </item>
</ripple>

/res/drawable/button_ripple.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <solid android:color="@color/white" />
        </shape>
    </item>
</selector>
于 2018-05-22T17:12:22.253 回答
1

我作为我的用例分享:它与ImageView一起使用:

app:backgroundTint没有生效,因为我android:src在该 Imageview 中为背景图像使用了标签。

当我将其更改android:background为 Imageview时,app:backgroundTint效果很好。

应该使用的不同答案提到的第二个用例

androidx.appcompat.widget.AppCompatImageView

而不是ImageView.

于 2021-06-08T07:27:03.260 回答