对androidx.cardview.widget.CardView的涟漪效应

时间:2019-08-21 05:54:36

标签: android android-cardview

我正在尝试在点击卡片视图时添加涟漪效应,这很奇怪吗?

这有什么问题吗?

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:app="http://schemas.android.com/tools"
    android:id="@+id/card_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:foreground="?android:attr/selectableItemBackground"
    android:clickable="true"
    android:layout_margin="5dp"
    card_view:cardCornerRadius="6dp"
    card_view:contentPadding="5dp"
    card_view:cardElevation="4dp"
    card_view:cardMaxElevation="6dp"
    app:ignore="NamespaceTypo"> 


</androidx.cardview.widget.CardView>

//我有一个线性布局,在cardview内部有三个textview。

RecyclerView:

<LinearLayout
        android:id="@+id/cardViewLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:visibility="gone">

        <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
            android:id="@+id/swipe_refresh_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/cardList"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />

        </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

    </LinearLayout>

谢谢!

3 个答案:

答案 0 :(得分:2)

请勿在{{1​​}}中使用任何background/foreground。如果使用任何背景色,则只需添加CardView。从app:cardBackgroundColor="@color/cardBackgroundColor中删除所有padding。在项目之间使用CardView作为间距。

现在,对于margin中的波纹效果,只需在CardView中添加直接子布局。在子布局中设置CardView。如果需要,在子级中添加任何必要的android:background="?attr/selectableItemBackground"

padding/margin

答案 1 :(得分:0)

请使用 com.google.android.material.card.MaterialCardView 代替 androidx.cardview.widget.CardView,这将提供开箱即用的功能。

背景:https://developer.android.com/jetpack/androidx/releases/cardview 是替代 https://developer.android.com/topic/libraries/support-library/packages#v7-cardview 的新基础,材料组件 https://developer.android.com/reference#other-libraries 使用根据 https://material.io/components/cards/android#card anatomy 定义的前景和涟漪颜色构建在 androidx.cardview 之上。 ..所以请检查您是否自定义了 ?attr/colorSurface?attr/colorOnSurfaceapp:cardForegroundColor 以设置彼此匹配的值以实现可见的更改

但是:听起来像https://github.com/material-components/material-components-android/issues/1095 ?‍♂️这样的新问题 而且代码文档好像有点怪怪的https://github.com/material-components/material-components-android/blob/master/lib/java/com/google/android/material/card/MaterialCardView.java#L303 ??

答案 2 :(得分:0)

现有的CardView没有波纹效果,使用MaterialCardView有波纹效果。

这里是 MaterialCardView 的示例代码

<com.google.android.material.card.MaterialCardView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="100dp"
        android:layout_height="115dp"
        app:cardCornerRadius="6dp"
        app:cardElevation="6dp"
        android:id="@+id/myCard"
        android:clickable="true"
        android:focusable="true">

<!-- Your child layout -->

</com.google.android.material.card.MaterialCardView>