我想要一个具有固定大小但可以动态更改跨度计数的网格(因此,当跨度计数更改时,网格中的单元格大小将有所变化)。
我不想要的是:
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- This constrainer view was something I just tested, didn't improve much. And felt hacky (I wanted to have the recyclerview as wrap content) !-->
<View
android:id="@+id/constrainer"
android:layout_width="200dp"
android:layout_height="200dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/grid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constrainedWidth="true"
app:layout_constrainedHeight="true"
app:layout_constraintTop_toTopOf="@+id/constrainer"
app:layout_constraintLeft_toLeftOf="@+id/constrainer"
app:layout_constraintRight_toRightOf="@+id/constrainer"
app:layout_constraintBottom_toBottomOf="@+id/constrainer"
app:spanCount="3"
tools:itemCount="9"
tools:listitem="@layout/MyItem" />
和网格项:
<View xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:background="#FF00FF00"/>
下面是layoutmanager:
grid.layoutManager = object : GridLayoutManager(this.context, adapter.size){
override fun canScrollVertically(): Boolean {
return false
}
override fun canScrollHorizontally(): Boolean {
return false
}
}
上面发布的当前设置适用于x维度,但是我无法确定是否可以删除所有滚动性并使它适用于Y维度。我无法让细胞正确地增加高度。
我为该工作使用了错误的工具(Recyclerview)吗?如何最好地实现我想要的行为? (我可能可以执行Linearlayouts / constraintlayout使其工作,但我想应该有一种简单的方法可以让我丢失)
答案 0 :(得分:0)
将其发布为部分自我回答,因为它可以工作,但不是最佳选择。乐意接受一个概述了更正确的方法的答案。
在适配器绑定上使用以下代码调整适配器视图的大小:
val containerSize = itemView.resources.getDimension(R.dimen.grid_size)
itemView.layoutParams.height = (containerSize / size).toInt()
itemView.layoutParams.width = (containerSize / size).toInt()
size
是行数/列数。提供我想要的行为(尽管size
不能平均划分grid_size
时有一些伪像)