我正在尝试在onCreate方法中获取 View 的高度,但找不到任何方法来删除OnGlobalLayoutListener。

在Java中(有效):

containerLayout.getViewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        containerLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
        int width  = layout.getMeasuredWidth();
        int height = layout.getMeasuredHeight();

    }
});

在Kotlin(不接受“此”):
   containerLayout.viewTreeObserver.addOnGlobalLayoutListener {
            containerLayout.viewTreeObserver.removeOnGlobalLayoutListener(this)
            Toast.makeText(applicationContext, "size is "+ containerLayout.height,Toast.LENGTH_LONG).show()
        }

是否有任何引用或示例,以解决此问题?谢谢。

最佳答案

不支持从内部引用lambda。

解决方法是,您可以使用匿名对象,而不是将lambda SAM转换为Java功能接口(interface)OnGlobalLayoutListener:

containerLayout.viewTreeObserver.addOnGlobalLayoutListener(object: OnGlobalLayoutListener {
    override fun onGlobalLayout() {
        // your code here. `this` should work
    }
})

09-26 03:26