【问题标题】:RecyclerView content heightRecyclerView 内容高度
【发布时间】:2015-04-07 20:51:53
【问题描述】:

有什么好的方法可以获取 RecyclerView 中内容的高度吗?考虑到所有项目可能有不同的高度。

在我的场景中,我使用的是 LinearLayoutManager。

我四处搜索,发现这个问题的结果出奇的少。

【问题讨论】:

    标签: android height android-recyclerview


    【解决方案1】:

    RecyclerView.computeVerticalScrollRange 将给出一个估计值 - 它平均当前显示的行的高度,并将其乘以 getItemCount 的结果

    computeHorizontalScrollRange 表示宽度,如果您的方向是水平的。

    【讨论】:

    • 这个方法总是返回0
    【解决方案2】:

    RecyclerView 是一个ViewGroup。您可以使用getChildAt / getChildCount 来获取视图。然后从视图上可以调用getWidth/getHeight

    如果您有 ItemDecorators 并且需要获取包含它们的尺寸,您可以使用 LayoutManagergetDecorated<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
    

    如果您的项目足够简单(例如具有固定高度),它应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-11
      • 2018-06-24
      • 1970-01-01
      • 2011-12-09
      • 1970-01-01
      • 2016-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多