首页 > 解决方案 > setOnApplyWindowInsetsListener 从未调用过

问题描述

我想计算导航栏的高度。我看过这个演示文稿:https ://chris.banes.me/talks/2017/becoming-a-master-window-fitter-nyc/

所以,我尝试使用该方法View.setOnApplyWindowInsetsListener()。但是,由于某种原因,它从未被调用过。

有谁知道为什么?有什么限制吗?

我试过这样使用它:

navBarOverlay.setOnApplyWindowInsetsListener { v, insets -> 
   Timber.i("BOTTOM = ${insets.systemWindowInsetBottom}")
   return@setOnApplyWindowInsetsListener insets
}

请注意,我的根布局是ConstraintLayout.

标签: androidandroid-layoutuser-interfacewindowinsets

解决方案


我遇到了同样的问题。

如果您的根视图是 ConstraintLayout 并且包含 android:fitsSystemWindows="true" attr,则该视图使用 onApplyWindowInsets 回调。因此,如果您在子视图上设置 onApplyWindowInsets,它们将永远不会获得 onApplyWindowInsets 回调。

或检查您的父视图是否使用回调。


推荐阅读