我有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
}
}
但是正如我所料,我得到了错误的行为。顶部/底部是可以的,但是例如,如果我向SpacingItemDecorator
传递16个填充(如我所说的,我连续有2个项目),则第一个项目将按预期在左侧获得8,但在项目之间有空格将为16(第一个项目的右边是8,第二个项目的左边是8)。但最奇怪的是,第二项也从右边获得16,而不是仅8(右边距)
我的问题是:
最佳答案
要为每个RecyclerView项获取8dp
填充,可以将RecyclerView填充设置为4dp
:
<androidx.recyclerview.widget.RecyclerView
android:padding="4dp"
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:spanCount="3"
/>
现在,在您的ItemDecorator中添加以下内容: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.top = padding
outRect.bottom = padding
outRect.left = padding
outRect.right = padding
}
}
现在在onCreate
中(或在任何地方设置RecylcerView的地方),您都可以添加此项目装饰器,并将其padding设置为4
:val x = (resources.displayMetrics.density * 4).toInt() //converting dp to pixels
recyclerView.addItemDecoration(SpacingItemDecorator(x)) //setting space between items in RecyclerView
结果:关于android - 如何在GridLayout中设置RecylerView项目装饰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63809035/