我可以在 GridLayoutManager 中以百分比设置列宽吗?
Can I set the width of a column in percents in GridLayoutManager?
我有一个包含 RecyclerView
的警告对话框。回收器中的每个项目都是一个简单的复选框。我需要把它画成三列。
为此我使用 GridLayoutManager
layoutManager = GridLayoutManager(context, 3, GridLayoutManager.HORIZONTAL, false)
我看到的结果是这样的
不错。问题是我需要将每列的宽度设置为对话框宽度的 33%。我的复选框没有任何固定宽度(以像素为单位),因为文本可能会有所不同。这是用于回收站的布局。
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="item" type="..." />
</data>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="@={item.enabled}"
android:text="@{item.name}"
android:minWidth="40dp"/>
</layout>
我的 Recycler 创建时宽度等于父
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content" />
知道如何以百分比设置宽度吗?
如果您的 RecyclerView
布局正确,您可以通过覆盖 LayoutManager
:
中的布局参数来强制 ViewHolder
大小
layoutManager = object : GridLayoutManager(context, 3, GridLayoutManager.HORIZONTAL, false){
override fun checkLayoutParams(lp: RecyclerView.LayoutParams) : Boolean {
// force width of viewHolder to be a fraction of RecyclerViews
// this will override layout_width from xml
lp.width = width / spanCount
return true
}
}
通过指定 GridLayoutManager.HORIZONTAL
,您已告知回收器视图填充 left-to-right,而不是 top-to-bottom。通过说您想要 spanCount
的 3,您实际要求的是每个 列 最多包含 3 个项目。这就是为什么您的项目在溢出到第二列之前在第一列中从 1 变为 3,而不是在第一行中从 1 变为 3。
虽然在很多情况下这是可取的,但从你问题的措辞来看,我怀疑你想要固定数量的列 (3),并且每列具有 33% 的宽度。您可以通过使用 GridLayoutManager.VERTICAL
方向并将每个 child 的大小设置为 MATCH_PARENT
来实现此目的,这应该会产生您想要的效果。
我有一个包含 RecyclerView
的警告对话框。回收器中的每个项目都是一个简单的复选框。我需要把它画成三列。
为此我使用 GridLayoutManager
layoutManager = GridLayoutManager(context, 3, GridLayoutManager.HORIZONTAL, false)
我看到的结果是这样的
不错。问题是我需要将每列的宽度设置为对话框宽度的 33%。我的复选框没有任何固定宽度(以像素为单位),因为文本可能会有所不同。这是用于回收站的布局。
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="item" type="..." />
</data>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="@={item.enabled}"
android:text="@{item.name}"
android:minWidth="40dp"/>
</layout>
我的 Recycler 创建时宽度等于父
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content" />
知道如何以百分比设置宽度吗?
如果您的 RecyclerView
布局正确,您可以通过覆盖 LayoutManager
:
ViewHolder
大小
layoutManager = object : GridLayoutManager(context, 3, GridLayoutManager.HORIZONTAL, false){
override fun checkLayoutParams(lp: RecyclerView.LayoutParams) : Boolean {
// force width of viewHolder to be a fraction of RecyclerViews
// this will override layout_width from xml
lp.width = width / spanCount
return true
}
}
通过指定 GridLayoutManager.HORIZONTAL
,您已告知回收器视图填充 left-to-right,而不是 top-to-bottom。通过说您想要 spanCount
的 3,您实际要求的是每个 列 最多包含 3 个项目。这就是为什么您的项目在溢出到第二列之前在第一列中从 1 变为 3,而不是在第一行中从 1 变为 3。
虽然在很多情况下这是可取的,但从你问题的措辞来看,我怀疑你想要固定数量的列 (3),并且每列具有 33% 的宽度。您可以通过使用 GridLayoutManager.VERTICAL
方向并将每个 child 的大小设置为 MATCH_PARENT
来实现此目的,这应该会产生您想要的效果。