如何隐藏导航栏而不隐藏状态栏

时间:2020-07-21 15:06:45

标签: java android

我试图仅隐藏底部导航栏,而不是状态栏。我得到的大多数代码都同时隐藏了导航栏和状态栏。

2 个答案:

答案 0 :(得分:0)

View v = getWindow().getDecorView();  
int options = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION  
            | View.SYSTEM_UI_FLAG_FULLSCREEN;  
v.setSystemUiVisibility(options); 

答案 1 :(得分:0)

尝试以下功能。由于Android RView.SYSTEM_UI_FLAG_HIDE_NAVIGATIONsetSystemUiVisibility等中的更改已被弃用。我已经完成了处理这种情况的功能。

public void hideBottomNavigationBar() {
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
         getWindow().setDecorFitsSystemWindows(false);
         WindowInsetsController controller = getWindow().getInsetsController();
         if(controller != null) {
           controller.hide(WindowInsets.Type.navigationBars());
           controller.setSystemBarsBehavior(WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE);
         }
      } else {
         getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

      }
}

关于使用docs中的View.SYSTEM_UI_FLAG_HIDE_NAVIGATION的另一件事:

有一个局限性:由于导航控件非常重要,因此最少的用户交互将使它们立即重新出现。发生这种情况时,此标志和SYSTEM_UI_FLAG_FULLSCREEN都将被自动清除,以便两个元素同时重新出现。

要解决此限制,您可以像这样设置View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);

但这仅适用于SDK 19及更高版本。