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