📅  最后修改于: 2023-12-03 14:40:01.485000             🧑  作者: Mango
CardView 是 Android 的一个 UI 组件,它支持圆角,阴影等效果,非常适合用来展示卡片式的布局。但有些开发者在使用 CardView 时会遇到一个问题:设置了 padding 后无法生效。
CardView 是继承自 FrameLayout 的一个类,而 FrameLayout 的特点是可以将子布局堆叠在一起。因此当我们给 CardView 设置 padding 时,实际上是给 CardView 的父布局设置了 padding,而并不是给 CardView 本身设置了 padding。这就导致了我们设置的 padding 无法生效的问题。
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 设置 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 的设置。本文介绍了两种解决填充无效问题的方法,希望对你有所帮助。