RecyclerView 内容高度
Posted
技术标签:
【中文标题】RecyclerView 内容高度【英文标题】:RecyclerView content height 【发布时间】:2015-04-07 20:51:53 【问题描述】:有什么好的方法可以获取 RecyclerView 中内容的高度吗?考虑到所有项目可能有不同的高度。
在我的场景中,我使用的是 LinearLayoutManager。
我四处搜索,发现这个问题的结果出奇的少。
【问题讨论】:
【参考方案1】:RecyclerView.computeVerticalScrollRange
将给出一个估计值 - 它平均当前显示的行的高度,并将其乘以 getItemCount
的结果
computeHorizontalScrollRange
表示宽度,如果您的方向是水平的。
【讨论】:
这个方法总是返回0【参考方案2】:RecyclerView 是一个ViewGroup
。您可以使用getChildAt
/ getChildCount
来获取视图。然后从视图上可以调用getWidth
/getHeight
。
如果您有 ItemDecorators 并且需要获取包含它们的尺寸,您可以使用 LayoutManager
的 getDecorated<xxx>
方法。
【讨论】:
考虑到RECYCLERView的性质,那不就是获取实际创建的子视图吗?假设我有 100 个项目,可能只有 10 个视图被夸大和回收。 如果您试图获取未布置的项目的高度,则不能,因为它们未布置。除了将每个项目都布置好之外,没有其他解决方案,这违背了使用 RecyclerView 的目的。 但是 RecylerView 知道的足以正确布局滚动条,所以它必须知道它的内容高度? 它通过将当前视图的平均大小乘以适配器中的项目数来近似所有项目的总大小。 啊哈。凉爽的。谢谢。【参考方案3】:我用来试验 View.measure 方法:
recycler.measure(View.MeasureSpec.makeMeasureSpec(recycler.width, View.MeasureSpec.EXACTLY), View.MeasureSpec.UNSPECIFIED)
val height = recycler.measuredHeight
如果您的项目足够简单(例如具有固定高度),它应该可以工作。
【讨论】:
以上是关于RecyclerView 内容高度的主要内容,如果未能解决你的问题,请参考以下文章
Recycler VIew 和 Adapter 打开内容不同的Activity
如图,Android 编程,右侧三个recyclerview布局,为啥是靠顶部,不是居中的?布局
Jetpack compose 中的 [NestedScrollView + RecyclerView] 或 [Nested RecyclerView (Recycler inside another
Android RecyclerView 绘制流程及Recycler缓存