【发布时间】:2021-07-20 08:59:01
【问题描述】:
我有 2 个功能,可帮助我在我的应用中启用和禁用全屏模式。默认情况下,我的应用程序未处于全屏模式。我想要的行为是当用户打开一个片段时,5 秒后我启用全屏模式。当用户触摸屏幕时,我禁用全屏模式,但 3 秒后我再次启用它。 这是我编写的代码(我使用的是旧版本)
private fun enableFullScreen() {
fullScreenModeEnabled = true
// From docs
decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_IMMERSIVE
or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_FULLSCREEN)
}
private fun disableFullScreen() {
if (fullScreenModeEnabled) {
// From docs
decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)
fullScreenModeEnabled = false
}
handler.removeCallbacks(enableFullScreenRunnable)
handler.postDelayed(enableFullScreenRunnable, 3000)
}
enableFullScreenRunnable 是一个简单的可运行对象,它在一定延迟后调用enableFullScreen() 函数。当用户打开片段时,5 秒后我使用处理程序和可运行对象调用 enableFullScreen() 函数。我有一个根视图的点击监听器,所以当用户点击屏幕时,我调用disableFullScreen()。
rootView.setOnClickListener {
disableFullScreen()
}
最后,我有一些 UI 元素,例如一个 textView,需要与我的应用程序的状态同步。因此,当应用程序进入全屏模式时,我必须隐藏我的 textView,反之亦然。
decorView.setOnSystemUiVisibilityChangeListener { visibility ->
if (visibility and View.SYSTEM_UI_FLAG_FULLSCREEN == 0) {
textView.visibility = View.VISIBLE
} else {
textView.visibility = View.INVISIBLE
}
}
问题是,Android 11 不推荐使用所有这些标志。在 Android Studio 中,它说使用 WindowsInsets 而不是这些标志。如何使用 WindowInsets 实现相同的功能?在官方文档中,代码不是最新的,仍然使用旧标志here
【问题讨论】:
标签: android kotlin android-fullscreen windowinsets