我需要获取我的回收视图高度,我写了这段代码,但它不起作用:
recyecle.getHeight()
还有这个
getLayoutParams().height
但它们都返回无效高度。
如何获得recyceview的确切高度?
答案 0 :(得分:0)
private int getViewHeight(View view) {
int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(screenWidth, View.MeasureSpec.AT_MOST);
int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
view.measure(widthMeasureSpec, heightMeasureSpec);
return view.getMeasuredHeight();
}
在recyceview具有布局
后调用此方法
通过添加布局监听器或者如果你在onresume之后使用它也可以
至少为我工作。
答案 1 :(得分:0)
前一段时间我遇到了同样的问题。我通过在我的片段onViewCreated方法中设置一个全局布局监听器来绕过它,以便在布局完成时将循环器的高度传递给适配器(然后到达所需的视图)。回收器视图很难获得高度,因为在设置适配器之前它们不包含在布局中。
view?.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
val height = main_recyclerview?.measuredHeight ?: 0
if (height > 0) {
view.viewTreeObserver?.removeOnGlobalLayoutListener(this)
mainAdapter.setRecyclerHeight(height)
}
}
})
这是我在kotlin中的代码,但它应该让你知道在Java中做什么
删除布局侦听器非常重要,否则您可以自行处理循环,更改导致重置布局的布局属性,然后调用侦听器,重置属性等等。