永久隐藏Android中的系统栏



这个问题已经被问了很多次:如何在android中永久隐藏状态栏?安卓ICS隐藏系统栏隐藏永久系统栏Android但大多数情况下,答案都不起作用,或者只会隐藏起来,直到用户用手指滑动。

requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                        WindowManager.LayoutParams.FLAG_FULLSCREEN);

这会导致应用程序崩溃。

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

这会暂时隐藏它。

    window.decorView.systemUiVisibility =
        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 or
        View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY

设置systemUIVisiblity具有完全相同的效果。

    val windowInsetsController =
        ViewCompat.getWindowInsetsController(window.decorView) ?: return
    // Configure the behavior of the hidden system bars
    windowInsetsController.systemBarsBehavior =
        WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
    // Hide both the status bar and the navigation bar
    windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())

这似乎没有任何作用,但如果会,它可能也会一直隐藏到滑动。

如果已尝试在不同事件上重复调用这些代码块:

val screenText : TextView = findViewById(R.id.textView5);
screenText.setOnClickListener {
    hideSystemUI()
}

创建一个TextView并在单击时调用代码块。

    window.decorView.setOnSystemUiVisibilityChangeListener { visibility ->
        // Note that system bars will only be "visible" if none of the
        // LOW_PROFILE, HIDE_NAVIGATION, or FULLSCREEN flags are set.
        if (visibility and View.SYSTEM_UI_FLAG_FULLSCREEN == 0) {
            // TODO: The system bars are visible. Make any desired
            // adjustments to your UI, such as showing the action bar or
            // other navigational controls.
            hideSystemUI()
        } else {
            // TODO: The system bars are NOT visible. Make any desired
            // adjustments to your UI, such as hiding the action bar or
            // other navigational controls.
        }
    }

此代码片段来自https://developer.android.com/training/system-ui/visibility

但这些工作很麻烦,如果你速度很快,你仍然可以扩展状态栏。滑动后将始终显示导航栏。

我为什么要让这些酒吧消失?因为我在写一个启动器。它应该看起来像三星儿童。在输入密码之前,应该禁止用户更改系统设置中的任何内容。在有这些限制的情况下,如何做到这一点?

我一直在使用它,到目前为止它运行良好。在setContentView((之后运行它。

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
        window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
    }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
        window.insetsController?.hide(WindowInsets.Type.statusBars())
    }

适用于android 11请注意,该方法仅适用。如果android操作系统是一个自定义映像,并且您有权更改操作系统源代码的路径:

在自定义android11 os 中从SystemUI隐藏nevigion栏

请参阅源代码https://android.googlesource.com/platform/prebuilts/fullsdk/sources/android-30/+/refs/heads/androidx wear wear正在进行发布.com/android/systemui/statussbar/NavigationBarController.java

frameworks\base\packages\SystemUI\src.com\android\SystemUI\statusbar\phone\NavigationBarController.java

@Override
    public void onDisplayRemoved(int displayId) {
        removeNavigationBar(displayId);
    }

Using view to set flag cannot work properly because when you switch window or app the nav bar will appear again

它可以很容易地删除导航栏或其他

相关内容

  • 没有找到相关文章

最新更新