Android 11 嵌套的 OnGlobalLayoutListener 不起作用

问题描述

在 Android 11 之前,以下代码获取视图大小方面没有任何问题。

** view1,view2 是一个可见性=不可见的文本视图。

fun onCreate(...){

  log("point1")
  view1.viewTreeObserver.addOnGlobalLayoutListener(object :
                            ViewTreeObserver.OnGlobalLayoutListener {

        override fun onGlobalLayout() {

             log("point2")
             view1.viewTreeObserver.removeOnGlobalLayoutListener(this)

             view2.viewTreeObserver.addOnGlobalLayoutListener(object :
                            ViewTreeObserver.OnGlobalLayoutListener {

                    override fun onGlobalLayout() {

                        log("point3")
                        view2.viewTreeObserver.removeOnGlobalLayoutListener(this)

                        //get width of view1 and view2
                    }
             })
        }
  })
}

然而,在我将我的设备更新到 Android11 之后,我的日志打印了“point2”,但从不记录“point3”,这意味着第二个 GlobalLayoutListener 没有被调用

幸运的是,我通过这样做成功了,这对我来说没有任何意义。

fun onCreate(...){

  log("point1")
  view1.viewTreeObserver.addOnGlobalLayoutListener(object :
                            ViewTreeObserver.OnGlobalLayoutListener {

        override fun onGlobalLayout() {

             log("point2")
             view1.viewTreeObserver.removeOnGlobalLayoutListener(this)

             //adding this line makes this code somehow to work.
             **textViewSomethingElse.text = "SOME TEXT FOR VISUAL LOGGING.."**

             view2.viewTreeObserver.addOnGlobalLayoutListener(object :
                            ViewTreeObserver.OnGlobalLayoutListener {

                    override fun onGlobalLayout() {

                        log("point3")
                        view2.viewTreeObserver.removeOnGlobalLayoutListener(this)

                        //get width of view1 and view2
                    }
             })
        }
  })
}

为什么会发生这种情况?我幸运地找到的解决方法只是一个黑客。有没有合适的方法可以达到相同的结果?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)