我试图获得一个CardView显示涟漪效应时,通过设置android:背景属性在活动XML文件中描述这里在android开发人员页面,但它不起作用。没有动画,但是onClick中的方法被调用。我还尝试按照这里的建议创建一个ripple.xml文件,但结果相同。

出现在活动的XML文件中的CardView:

<android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="155dp"
    android:layout_height="230dp"
    android:elevation="4dp"
    android:translationZ="5dp"
    android:clickable="true"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:onClick="showNotices"
    android:background="?android:attr/selectableItemBackground"
    android:id="@+id/notices_card"
    card_view:cardCornerRadius="2dp">

</android.support.v7.widget.CardView> 

我对android开发相对陌生,所以我可能犯了一些明显的错误。


当前回答

如果有一个根布局,比如RelativeLayout或LinearLayout,它包含了CardView中所有适配器项的组件,你必须在那个根布局中设置background属性。如:

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="122dp"
android:layout_marginBottom="6dp"
android:layout_marginLeft="6dp"
android:layout_marginRight="6dp"
card_view:cardCornerRadius="4dp">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/touch_bg"/>
</android.support.v7.widget.CardView>

其他回答

如果有一个根布局,比如RelativeLayout或LinearLayout,它包含了CardView中所有适配器项的组件,你必须在那个根布局中设置background属性。如:

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="122dp"
android:layout_marginBottom="6dp"
android:layout_marginLeft="6dp"
android:layout_marginRight="6dp"
card_view:cardCornerRadius="4dp">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/touch_bg"/>
</android.support.v7.widget.CardView>

涟漪效应在您正在使用的appcompat支持库中被省略了。如果你想看到波纹,请使用Android L版本并在Android L设备上进行测试。根据AppCompat v7网站:

“为什么前棒棒糖时代没有涟漪?” 很多让RippleDrawable顺利运行的是Android 5.0的新RenderThread。为了优化之前Android版本的性能,我们暂时放弃了RippleDrawable。”

点击这个链接了解更多信息

对我来说,将前景添加到CardView没有工作(原因未知:/)

将相同的元素添加到它的子布局中就可以了。

代码:

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:focusable="true"
    android:clickable="true"
    card_view:cardCornerRadius="@dimen/card_corner_radius"
    card_view:cardUseCompatPadding="true">

    <LinearLayout
        android:id="@+id/card_item"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:foreground="?android:attr/selectableItemBackground"
        android:padding="@dimen/card_padding">

    </LinearLayout>
</android.support.v7.widget.CardView>

如果你想在(child) Card视图中添加任何元素,你可以使用:

<ImageView
android:background="?android:attr/selectableItemBackground"

但如果你需要整个卡视图,这样做:

android:foreground="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"

如果你用两种颜色,颜色会比其他颜色深。

然而,最简单的方法是

com.google.android.material.card.MaterialCardView

你应该在CardView中添加以下内容:

android:foreground="?android:attr/selectableItemBackground"
android:clickable="true"