我实现的是这样的。
我在 Activity 中设置了它。
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN)
状态栏不应隐藏,而应隐藏控制栏。
然后当我打开一个对话框并关闭它时,我调用下面的方法:
private fun setDefaultUi(dialog: Dialog?) {
var decorView: View? = null
if (dialog == null) {
decorView = this.window.decorView
} else {
decorView = dialog!!.window.decorView
}
decorView.systemUiVisibility = (
View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY // hide status bar and nav bar after a short delay, or if the user interacts with the middle of the screen
)
}
像这样:
private fun showMyDialog() {
noticeUrlDialog = Dialog(this)
noticeUrlDialog!!.setContentView(R.layout.dialog_my)
val btnClose = myDialog!!.btn_close
btnX.setOnClickListener {
myDialog!!.dismiss()
setDefaultUi(null)
}
myDialog!!.show()
setDefaultUi(myDialog)
}
这样,我就可以隐藏弹出并关闭对话框后出现的底部控制栏。
但我认为这不是一个正确的方法。我需要多次调用该方法,而且控制栏在 setDefaultUi()
之前显示一秒钟。所以我想知道有没有更好的办法?
最佳答案
当监听 ui 更改并再次应用标志时,我只能使用 SystemUiVisibilityChangeListener 在所有 API 和设备上实现它。以下是 Kotlin 中的示例代码:
fun hideStatusBar() {
DisplayUtil.hideStatusBar(activity)
activity?.window?.decorView?.setOnSystemUiVisibilityChangeListener { visibility ->
if (visibility and View.SYSTEM_UI_FLAG_FULLSCREEN == 0) {
DisplayUtil.hideStatusBar(activity)
}
}
}
和DisplayUtil.hideStatusBar(activity)
:
object DisplayUtil {
fun hideStatusBar(activity: Activity?) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
activity?.window?.decorView?.systemUiVisibility = (
View.SYSTEM_UI_FLAG_IMMERSIVE
or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_FULLSCREEN)
} else {
activity?.window?.decorView?.systemUiVisibility = (
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
or View.SYSTEM_UI_FLAG_FULLSCREEN)
}
}
}
另外,不要忘记在不需要时删除监听器。
关于java - 即使在对话框显示并关闭后,如何保持底部控制栏始终隐藏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56747440/