【问题标题】:Programmatically enable/disable Immersive Mode以编程方式启用/禁用沉浸式模式
【发布时间】:2016-07-07 19:49:50
【问题描述】:

我想让我的 Android 应用全屏显示,但只在某个屏幕(我的设置屏幕)上显示 android 导航栏。我知道在屏幕上永久隐藏导航栏很危险,但我想知道这是否可行。我已经研究过植根我的设备并使用 Xposed 框架。

有没有办法以编程方式禁用导航栏或“粘滞模式”,然后再重新启用?

编辑:我查看了 Android 沉浸式模式,但如果用户触摸边缘,导航栏似乎仍会显示。我想删除导航栏的任何提示,直到它们进入我的设置屏幕。

【问题讨论】:

    标签: java android xposed


    【解决方案1】:

    是的,这是可能的。使用下面的代码 sn -p 来实现所需的功能。

    // This snippet hides the system bars.
    private void hideSystemUI() {
        // Set the IMMERSIVE flag.
        // Set the content to appear under the system bars so that the content
        // doesn't resize when the system bars hide and show.
       View decorView = getWindow().getDecorView();
        decorView.setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
                | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
                | View.SYSTEM_UI_FLAG_IMMERSIVE);
    }
    
    // This snippet shows the system bars. It does this by removing all the flags
    // except for the ones that make the content appear under the system bars.
    private void showSystemUI() {
        View decorView = getWindow().getDecorView();
        decorView.setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
    }
    

    有关更多详细信息,请参阅以下 google 文档:

    https://developer.android.com/training/system-ui/immersive.html

    编辑 1:要永久隐藏它可能是你可以尝试这样的事情(Hacky)

    decorView.setOnSystemUiVisibilityChangeListener
                    (new View.OnSystemUiVisibilityChangeListener() {
                        @Override
                        public void onSystemUiVisibilityChange(int visibility) {
    
                                hideSystemUI();
    
    
                        }
                    });`
    

    【讨论】:

    • 感谢您的回复。我在发布之前正在查看此内容,但我对沉浸式模式的问题是这一行:“用户可以沿着系统栏通常出现的区域向内滑动来显示系统栏”。这不会覆盖 hide() 吗?我想禁用它,直到用户进入我的设置屏幕。
    • 是的,事实上,当用户第一次打开沉浸式模式时,他会看到一个教程。这告诉他向下滑动将关闭全屏模式。
    • 对,我不希望他们关闭全屏模式除非他们转到我的其他屏幕之一。这就是我真正的问题。我想阻止用户完全访问导航栏,直到他们进入某个屏幕。
    • 更新了我的答案,但我认为如果没有 root 访问权限,您将无法实现所需的功能。
    • 谢谢。是的,我期待我需要 root 设备...
    猜你喜欢
    • 1970-01-01
    • 2021-05-31
    • 2019-10-22
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多