【问题标题】:Hiding navigation bar without rooting on android隐藏导航栏而不在android上生根
【发布时间】:2014-12-06 10:43:25
【问题描述】:

我想为 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);
            }
        }
    });

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

【问题讨论】:

  • 由于这更像是一个建议而不是一个答案,所以这里有一个想法:您是否尝试过完全删除 ActionBar?如果你这样做,你可以随时添加一个伪ActionBar(也可以为它设置动画)。问题仅在于添加所有 ActionBar 功能并自行管理 - 包括图标、向上按钮、标题、按钮等。如果您仍然无法完全删除它,请随时告诉我。我还问了一个关于删除 ActionBar 的类似问题,所以这也应该有所帮助。
  • 感谢您的建议。如果我删除 ActionBar,底部导航栏会不可见吗?如果是这样,我该如何删除操作栏?
  • 很抱歉回复晚了,但这取决于您所说的“底部导航栏”是什么意思。如果您的意思是沿屏幕底部边缘的导航选择,则它与 ActionBar 是分开的。如果您想 完全 和 完全 删除 ActionBar(我必须这样做才能对客户的应用程序进行完全控制和可定制性),那么只需阅读 TulsiramRathod 的惊人答案: [stackoverflow.com/questions/26901444/…。请注意,这不将您限制为 API 4.0/4.4+。如果你愿意,我可以为它写一个答案。

标签: android navigationbar android-fullscreen


【解决方案1】:

我相信你所描述的你在一些游戏中看到的被称为“沉浸式模式”。导航栏完全消失,屏幕边缘的一个手势将它带回来。此功能从 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

【讨论】:

  • 感谢您的回答。我正在 android 4.2.2 设备上进行测试。这就是为什么我不能使用沉浸式模式,到目前为止我找不到任何有用的东西。
  • 是的,我的游戏也遇到了同样的问题。在 4.4 之前您可以做的最好的事情是低调标志。按钮仍然存在并占用空间,但作为微弱的点。就我而言,我隐藏了一切并低调行事。用户按下“返回”在低调和正常之间切换,菜单可见。如果您的应用需要持续的屏幕交互,则隐藏导航标志将毫无用处。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-24
  • 2016-12-23
  • 2015-10-06
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多