java - 即使在对话框显示并关闭后,如何保持底部控制栏始终隐藏?

标签 java android android-layout kotlin android-alertdialog

我实现的是这样的。

我在 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/

相关文章:

java - 使用 mockito 在另一个 spring 服务中模拟服务

android - SurfaceView 中的缩放和拖动功能

android - 使用 Retrofit 发布原始数据

java - Android: NullPointerException: println 需要一条消息;

java - 在布局和 ScrollView 底部添加按钮

android - 带图像的多线和样式 Android 按钮

java - 检查 hibernate JPA 中生成的代理类

Java GUI - 将来自其他 if 语句的值调用到 getSource() 事件中

java - ListView Intent On Item Click Listener 停止应用程序错误

java - 大型数据库不应该使用hibernate吗