【问题标题】:How can I hide Navigation Bar without hiding the status bar如何隐藏导航栏而不隐藏状态栏
【发布时间】:2020-07-21 15:06:45
【问题描述】:

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

【问题讨论】:

    标签: java android


    【解决方案1】:

    试试下面的功能。由于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 及更高版本。

    【讨论】:

      【解决方案2】:
      View v = getWindow().getDecorView();  
      int options = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION  
                  | View.SYSTEM_UI_FLAG_FULLSCREEN;  
      v.setSystemUiVisibility(options); 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-26
        相关资源
        最近更新 更多