8

我目前在测量 recyclerView 出现之前遇到问题。我需要 measureHeight 才能开始“展开”动画。

这是以前在我正在处理的代码中为 gridView 完成的,我正在尝试使用 GridLayoutManager 将其迁移到 RecyclerView

final int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
final int heightSpec = View.MeasureSpec.makeMeasureSpec(MEASURED_SIZE_MASK, View.MeasureSpec.AT_MOST);
mGridView.measure(widthSpec, heightSpec);
int targetHeight = mGridView.getMeasuredHeight();

它与 gridView 一起工作,但如果我在 recyclerView 上调用具有相同测量规格的测量方法,结果总是 16777215,我认为这可能是某些东西的最大值,但我不能说是什么。

我看到一些帖子解释说,可以通过以下测量规格测量视图,然后在屏幕上呈现视图之前对其进行测量:

final int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
final int heightSpec = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);

但我为 recyclerView.getMeasuredHeight(); 得到 0。

有没有办法在 recyclerView 在屏幕上呈现之前正确测量它的高度?

谢谢。

4

3 回答 3

2

感谢 yigit post,我终于可以通过手动填充孩子的视图来计算未来的 recyclerView 高度,用以下方法测量它:

final int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
final int heightSpec = View.MeasureSpec.makeMeasureSpec(MEASURED_SIZE_MASK, View.MeasureSpec.AT_MOST);

最后将其测量高度乘以 gridLayoutManager 中包含的行数。希望对 RecycleViews layoutManagers 的 WRAP_CONTENT 支持很快就会到来。

于 2014-10-23T11:13:21.410 回答
1

您是否尝试在添加视图之前对其进行测量?如果是这样,那就很危险了。

此外,遗憾的是,就 RecyclerView 而言,现有的布局管理器还不支持 WRAP_CONTENT。它们依赖于支持 match_paren 和精确尺寸的基本实现。

如果您知道您的项目的高度,您可以扩展 GridLayoutManager,覆盖 onMeasure 并自己在那里测量它。

于 2014-10-22T23:39:39.240 回答
0

另请参阅如何使 WRAP_CONTENT 在 RecyclerView 上工作

如果您将您RecyclerView的容器放在RelativeLayout或之类的容器中,您可以使用您喜欢的或其他变体NestedScrollView获得它的尺寸。recyclerView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED)在测量之前最好先打电话post { /* measure here */ }

于 2019-11-27T16:03:48.170 回答