我目前在测量回收器时遇到问题查看它出现之前。我需要测量的高度才能开始“扩展”动画。
这是以前在我正在处理的代码中为grdView完成的,我正在尝试使用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上调用具有相同度量规格的measure方法,结果总是16777215,我认为这可能是某个值的最大值,但我不能说是什么。
我看到一些帖子解释说,可以通过以下测量规格在屏幕上渲染视图之前对其进行测量:
final int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
final int heightSpec = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
但我为recyclerView.getMeasuredHeight();得到了0;。
有没有办法在屏幕上呈现之前正确测量回收器视图的高度?
谢了。
多亏了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);
最后将其measuredHeight乘以gridLayoutManager中包含的行数。希望WRAP_CONTENT能很快为RecycleViews layoutManagers提供支持。
您是否尝试在添加视图之前测量视图?如果是这样,那是危险的。
此外,不幸的是,就RecyclerView而言,现有的布局管理器尚不支持WRAP_CONTENT。它们依赖于支持match_paren的基本实现
如果您知道您的项目的高度,您可以扩展GridLayoutManager,覆盖onSensure并自己在那里测量它。
另请参阅如何在回收器视图上WRAP_CONTENT工作。
如果将< code > recycle View 放在容器(如< code>RelativeLayout或< code>NestedScrollView)中,则可以使用< code > recycle View . measure(View)获取它的度量。未指定的测量规格,视图。MeasureSpec.UNSPECIFIED)或您喜欢的其他变体。在测量之前,最好调用< code > post {/* measure here */} 。