微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android 11 嵌套的 OnGlobalLayoutListener 不起作用

如何解决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 举报,一经查实,本站将立刻删除。