如何在Android应用中隐藏导航栏?

12
我想知道如何在Android应用程序中隐藏导航栏?
我知道如何最初隐藏它,但是一旦我触摸屏幕它就会重新弹出。我想以类似Clash of Clans游戏的方式隐藏它,只有通过向下滑动通知或向导航栏应该出现的位置滑动才能使其弹出。

1
你想在IDE或你的应用程序中隐藏导航栏吗? - span
在应用程序中,但甘加·奈杜回答了它。无论如何感谢。 - random user
这回答解决了您的问题吗?如何在Android活动中永久隐藏导航栏? - Miloš Černilovský
7个回答

22

使用沉浸模式,请查看沉浸模式

    // 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.
    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 // 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() {
    mDecorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}

2
这正是我正在寻找的!谢谢! - random user
2
我还需要等待另外2分钟才能接受答案,而且由于我声望不够,我无法点击上箭头。 - random user
非常感谢您的帮助,已成功隐藏了工具栏。但是,一旦我向上滑动以显示导航栏,它并不像状态栏那样在一段时间后自动隐藏。我该如何让用户重新与游戏交互后,导航栏自动隐藏呢? - hegerber
3
如果您希望导航栏自动隐藏,就可以使用"IMMERSIVE_STICKY"代替"IMMERSIVE"。请注意,这不会改变"IMMERSIVE"的含义,只是添加了自动隐藏导航栏的功能,类似于通知栏的效果。 - Colby Ray
我发现在某些设备上,这会导致应用程序中的第一个触摸被忽略。 - Clinton
调用showSystemUI方法后,导航栏会重叠底部布局。 - Ram

17

在onCreate方法的上下文中,它是这样的:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        this.getWindow().getDecorView().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_IMMERSIVE_STICKY);

    }

安卓文档对不同标志的功能有很好的解释: 使用沉浸式全屏模式


11

只需将此方法放置在您希望以粘性模式隐藏状态栏和导航栏的活动中。

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    //This is used to hide/show 'Status Bar' & 'System Bar'. Swip bar to get it as visible.
    View decorView = getWindow().getDecorView();
    if (hasFocus) {
        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
                        | View.SYSTEM_UI_FLAG_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
    }
}

Android Studio无法理解此代码,View decorView标记为红色。 - Mark Kortink
@MarkKortink - View decorView 只是 View 类的一个对象。 - Chirag Prajapati

5
在super.onCreate(savedInstanceState);之后添加以下两行代码即可轻松实现:
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

有一个问题:关闭并重新打开屏幕,你会再次看到导航栏。 - Style-7

0
在你的活动的onCreate方法中:
this.getWindow()
    .setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
              WindowManager.LayoutParams.FLAG_FULLSCREEN);

2
只有当用户点击屏幕时,它才会隐藏。 - random user
1
它在我的应用程序中不起作用。你的应用程序是否有一些onClickListner可能会改变你的窗口标志? - John D.

0

您可以使用上面的代码片段创建一个活动,然后在布局上方添加另一个窗口:

LayoutParams layoutParameteres=new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
        v.setLayoutParams(layoutParameteres);
        final WindowManager.LayoutParams parameters=new WindowManager.LayoutParams(sizeX, sizeY, WindowManager.LayoutParams.TYPE_PHONE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT);
        parameters.gravity=Gravity.CENTER;
        parameters.x=0;
        parameters.y=0;
        wm.addView(v, parameters);

祝你好运


-2
修改 AndroidManifest.xml 文件中的此行。
android:theme="@style/Theme.AppCompat.DayNight.NoActionBar"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接