2

我有这个听众:

val listener = WindowInsetsControllerCompat.OnControllableInsetsChangedListener { controller: WindowInsetsControllerCompat, typeMask: Int ->
                Log.i(FragmentVodPlayer.TAG, "onControllableInsetsChanged: changed")
                if (typeMask and WindowInsetsCompat.Type.statusBars()
                    == WindowInsetsCompat.Type.statusBars()
                    || typeMask and WindowInsetsCompat.Type.navigationBars()
                    == WindowInsetsCompat.Type.navigationBars()
                ) {
                    hideAfterAWhile.postDelayed({
                        controller.hide(
                            WindowInsetsCompat.Type.navigationBars()
                                    or WindowInsetsCompat.Type.statusBars()
                        )
                    }, 3000)
                }
            }

我将它添加到instetsController这样的:

insetsController.addOnControllableInsetsChangedListener(listener)

当我执行时它工作正常:

insetsController.hide(
                    WindowInsetsCompat.Type.statusBars()
                            or WindowInsetsCompat.Type.navigationBars()
                )

但是当我点击我的屏幕并显示导航栏时,这个监听器永远不会触发,从我在文档中阅读的内容来看,它应该。

我知道这个监听器在我隐藏系统栏时起作用,因为我可以看到它将消息打印到我的 logcat 中。

4

1 回答 1

0

所以,经过多次尝试让这个工作我放弃了,但我发现如果你改变 systemBarsBehaviour

insetsController.systemBarsBehavior =
                    WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE

系统自己隐藏了所有东西,我更容易获得想要的效果,可能这就是它的意图。

于 2021-08-18T07:53:18.613 回答