隐藏导航栏而不需要在Android上生根

时间:2014-12-06 00:32:40

标签: android navigationbar android-fullscreen

我想为Android平板电脑制作全屏应用程序,我试图隐藏导航栏和4.0+。我读了类似的问题和答案,但我找到的并不适合我。如果无法永久隐藏导航栏,我怎样才能隐藏它并在从底部滑动后使其可见?我在一些游戏中看到过,我认为这是可能的。到目前为止我尝试了这个,起初它隐藏了导航栏,但当我触摸屏幕导航栏再次可见时,我不想要它。

decorView = getWindow().getDecorView();
    int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);

我也试过了,但我再次为我做了工作

decorView.setOnSystemUiVisibilityChangeListener
            (new View.OnSystemUiVisibilityChangeListener() {
        @Override
        public void onSystemUiVisibilityChange(int visibility) {
            // Note that system bars will only be "visible" if none of the
            // LOW_PROFILE, HIDE_NAVIGATION, or FULLSCREEN flags are set.
            if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
                int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_FULLSCREEN;
          decorView.setSystemUiVisibility(uiOptions);


            } else {
                int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_FULLSCREEN;
          decorView.setSystemUiVisibility(uiOptions);
            }
        }
    });

如何隐藏它并从底部滑动或永远隐藏使其可见? 请给我一个建议。提前致谢

1 个答案:

答案 0 :(得分:1)

我相信你在一些游戏中所看到的内容被称为" Immersive Mode"。导航栏完全消失,屏幕边缘的手势将其恢复。此功能从Android 4.4版开始提供。

在Android 4.4之前,自Android 4.0以来,您可以使用"隐藏导航"标志,它将暂时隐藏导航栏。此模式的问题在于与屏幕的任何交互都将导致导航栏重新出现。对于那些需要与屏幕进行大量互动的应用来说,这当然不是很有用,就像大多数游戏一样。

我通常使用以下功能进入和退出沉浸式模式:

private void hideSystemUI() {
    mDecorView.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
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LOW_PROFILE
            | View.SYSTEM_UI_FLAG_IMMERSIVE); // This flag only for 4.4+
}

private void showSystemUI() {
    mDecorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}

然后在我的onCreate中,我设置mDecorView并调用hideSystemUI:

    mDecorView = getWindow().getDecorView();
    hideSystemUI();

代码类似于你所拥有的代码,所以这可能没有帮助。这里有一个关于这个主题的详细视频,包括更详细的源代码示例:https://www.youtube.com/watch?v=cBi8fjv90E4