设置适配器后如何获得recyceview高度?

时间:2017-12-05 09:18:41

标签: android android-recyclerview

我需要获取我的回收视图高度,我写了这段代码,但它不起作用:

recyecle.getHeight()

还有这个

getLayoutParams().height

但它们都返回无效高度。

如何获得recyceview的确切高度?

2 个答案:

答案 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中做什么

删除布局侦听器非常重要,否则您可以自行处理循环,更改导致重置布局的布局属性,然后调用侦听器,重置属性等等。