📜  cardview 设置填充不起作用 (1)

📅  最后修改于: 2023-12-03 14:40:01.485000             🧑  作者: Mango

CardView 设置填充不起作用

问题描述

CardView 是 Android 的一个 UI 组件,它支持圆角,阴影等效果,非常适合用来展示卡片式的布局。但有些开发者在使用 CardView 时会遇到一个问题:设置了 padding 后无法生效。

分析原因

CardView 是继承自 FrameLayout 的一个类,而 FrameLayout 的特点是可以将子布局堆叠在一起。因此当我们给 CardView 设置 padding 时,实际上是给 CardView 的父布局设置了 padding,而并不是给 CardView 本身设置了 padding。这就导致了我们设置的 padding 无法生效的问题。

解决方法
方法一:使用 CardView 的 cardPreventCornerOverlap 属性

CardView 默认会将圆角剪裁掉,以实现圆角效果。如果我们设置了 padding,那么这些 padding 也会被当做圆角被剪裁。为了避免这个问题,可以使用 CardView 的 cardPreventCornerOverlap 属性,该属性默认为 true,即不允许 padding 和圆角重叠。我们可以将其设置为 false,以允许 padding 和圆角重叠,来解决填充无效的问题。

示例代码:

<androidx.cardview.widget.CardView
    android:id="@+id/cardView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="16dp"
    app:cardCornerRadius="8dp"
    app:cardPreventCornerOverlap="false">

    <!-- 子布局 -->

</androidx.cardview.widget.CardView>
方法二:在 CardView 外层套一个布局

既然我们不能直接给 CardView 设置 padding,那么我们可以在 CardView 外层套一个布局,然后给外层布局设置 padding。这样就可以实现填充的效果了。

示例代码:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="16dp">

    <androidx.cardview.widget.CardView
        android:id="@+id/cardView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:cardCornerRadius="8dp">

        <!-- 子布局 -->

    </androidx.cardview.widget.CardView>

</LinearLayout>
总结

CardView 是一个非常实用的 UI 组件,可以轻松实现卡片式的布局。但在使用时需要留意一些细节,例如 padding 的设置。本文介绍了两种解决填充无效问题的方法,希望对你有所帮助。