Android 6.0 如何隐藏导航栏?

How to hide the navigation bar in Android 6.0?

我有以下代码:

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);

此代码适用于 Android Lollipop,在粘性沉浸模式下隐藏导航栏。但是现在,当我使用 Android 6.0 在我的 phone 上测试它时,导航栏消失了,而导航栏曾经所在的黑色矩形仍然存在,挡住了屏幕的一部分。

我发现了似乎可以解决此问题的解决方法。我支持纵向和横向,并注意到如果我旋转成横向或以横向启动应用程序,黑色矩形就会消失。将以下代码添加到我的主要 activity 的 onCreate() 方法(设置沉浸式标志后)解决了问题:

    if (Build.VERSION.SDK_INT >= 23) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
    }

回顾我的问题,我想补充一下我现在使用的解决方案,从那以后我一直没有失败,我不记得我是在其他地方看到它还是自己来的,但我很高兴它有效。

public static void activiateFullscreen(Activity activity){
    View decorView = activity.getWindow().getDecorView();
    int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
    if (Build.VERSION.SDK_INT >= 17) {
        uiOptions ^= View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_FULLSCREEN
                |View.SYSTEM_UI_FLAG_LOW_PROFILE;
    }
    if (Build.VERSION.SDK_INT >= 19) {
        uiOptions ^= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
    }
    decorView.setSystemUiVisibility(uiOptions);
}

希望这对某人有所帮助!