首页 > 解决方案 > 如何在项目适应之前知道适配器项目的像素高度

问题描述

尝试在调整任何项目之前获取适配器列表项的像素高度

var item =
    LayoutInflater.from(context).inflate(R.layout.adapter_item, null)

item.post {
    System.out.println("height=$item.height")
}

以上 ^^^ 我膨胀了片段中引用和使用适配器的项目。然后我将高度打印为可运行的,所以我知道高度不会过早调用并且不会为零。

问题是 runnable 不运行,并且项目高度不打印。

我的问题是什么?谢谢

相关帖子 View 的 getWidth() 和 getHeight() 返回 0

编辑

我也试过这个,但没有打印语句

    item.viewTreeObserver.addOnGlobalLayoutListener {
        //At this point the layout is complete and the
        //dimensions of myView and any child views are known.
        System.out.println("height=$item.height")
    }

我认为问题可能与膨胀不在可见层次结构中的布局有关?

标签: androidandroid-layoutandroid-fragmentsandroid-view

解决方案


看起来我只需要确定适配器的高度。我可以看到打印出来的。

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
    
    var item = LayoutInflater.from(parent.context)
        .inflate(R.layout.list_item, parent, false) as ConstraintLayout

    item.post {
        System.out.println("height=${item.height}")
    }

    return MyViewHolder(
        item
    )
}

推荐阅读