繁体   English   中英

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

[英]How can I hide Navigation Bar without hiding the status bar

我试图只隐藏底部导航栏而不是状态栏。 我得到的大部分代码都隐藏了导航栏和状态栏。

试试下面的 function。 由于Android RView.SYSTEM_UI_FLAG_HIDE_NAVIGATIONsetSystemUiVisibility等的变化被弃用。 我制作了 function 来处理这种情况。

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

      }
}

关于使用文档中的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 及以后。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM