【发布时间】:2020-09-09 09:47:06
【问题描述】:
我有 2 个跨度的简单网格布局,我的 RecyclerView 项目布局如下所示:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.card.MaterialCardView
android:id="@+id/categoryCardView"
android:layout_width="170dp"
android:layout_height="100dp"
app:cardBackgroundColor="@color/colorPrimary"
app:cardCornerRadius="10dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</com.google.android.material.card.MaterialCardView>
</androidx.constraintlayout.widget.ConstraintLayout>
我想要的基本上是四面八方的空间,所以我这样设置物品装饰:
recylcerView.addItemDecoration(SpacingItemDecorator(16))
class SpacingItemDecorator (private val padding: Int): RecyclerView.ItemDecoration() {
override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
super.getItemOffsets(outRect, view, parent, state)
// outRect.right = padding
// outRect.top = padding * 2
outRect.top = padding
outRect.right = padding/2
outRect.left = padding/2
}
}
但正如我所料,我遇到了错误的行为。顶部/底部没问题,但例如,如果我将 16 填充传递给 SpacingItemDecorator(正如我所说我连续有 2 个项目),第一个项目将按预期在左侧得到 8,但在项目之间, 空间将为 16(第一项右侧为 8,第二项左侧为 8)。
但最奇怪的是,第二个项目也从右边得到 16,而不是只有 8(右填充)
我的问题是:
-
为什么我的行中的第二个项目会从右边得到 16 个填充,而不是第一个项目从左边得到 8 个?
-
如何为所有尺寸设置相同的填充?
【问题讨论】:
-
所以你只想得到等于
8dp的填充? -
@iknow 是的,我当然尝试为项目的根约束布局提供填充,但它仍然在项目之间提供两次填充
-
您没有为卡设置左约束。看来你根本不需要约束,因为你只有一个孩子(你的卡)
标签: android android-layout kotlin android-recyclerview android-arrayadapter