RecyclerView的项目高度是不固定,我需要为每个项目设置背景图像,所以我想获得recyclerview项目的高度调整图像大小,但itemView.getHeight()
始终在onBindViewHolder
中返回0。如何获得“onBindViewHolder”recyclerview项目的高度
我试图搜索很多问题或文章,但我仍然无法获得一个良好的解决方案。
RecyclerView的项目高度是不固定,我需要为每个项目设置背景图像,所以我想获得recyclerview项目的高度调整图像大小,但itemView.getHeight()
始终在onBindViewHolder
中返回0。如何获得“onBindViewHolder”recyclerview项目的高度
我试图搜索很多问题或文章,但我仍然无法获得一个良好的解决方案。
短
测量查看手动
view.measure(
View.MeasureSpec.makeMeasureSpec(recyclerViewWidth, View.MeasureSpec.EXACTLY),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
,并得到高度与view.getMeasuredHeight()
背景
视图后,才返回一个有效的价值View.getHeight()
它一直测量。当视图即将显示在屏幕上时,系统会自动进行测量。
当Android想要显示布局时,它将递归地调用视图树中每个视图的view.layout()
函数。每个家长告诉他们的孩子他们可能有的限制(宽度/高度),并要求他们自己view.measure()
。因此,该视图将在指定成员(MeasuredHeight/Width)上的约束条件下存储测量值BASED。请注意,此时view.getMeasuredHeight()
将保留该值,而view.getHeight()
仍然无效。 view.getHeight()
只有在UI层次结构中具有实际高度时才会返回有效值。
重温
所以,要知道一个视图元素的高度,它已被测量,并通过系统布局之前,我们需要手动调用view.measure()
功能。
度量函数需要2个从视图LayoutParams +父约束派生的参数。
在上面的代码示例中,我们测量的视图强制其宽度为正确父级的宽度(RecycleView),并且高度不受限制。
我建议您定义具有预期高度的多个布局文件,并根据数据集中的某些条件对它们进行膨胀。
VH onCreateViewHolder (ViewGroup parent,
int viewType){
if(some condition){
//inflate layout 1
}else{
//inflate layout 2
}
或回答here:你可以得到测量,同时初始化观点持有者
viewHolder.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
int width = viewHolder.getMeasuredWidth();
int height = viewHolder.getMeasuredHeight();
是的!你为我节省了很多代码!谢谢 – Titmael