Android隐藏导航栏/点击按钮时保持沉浸模式

问题描述:

看起来很简单的事情会导致我几个问题。我曾看过以下解决方案:Android隐藏导航栏/点击按钮时保持沉浸模式

Android Hide Navigation Bar/Stay in Immersive Mode with Soft Keyboard Appearance

我有一个简单的活动与ImageButton。我想要进入沉浸模式。我在onCreate中调用以下方法。

问题 第一次点击屏幕总是会弹出导航栏并且不会触发点击处理程序。有一个简单的/少哈克的方式来阻止这种

public void hideNavigationBar() 
     { 
      final View decorView = getWindow().getDecorView(); 

      int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 
        | View.SYSTEM_UI_FLAG_FULLSCREEN; 
      decorView.setSystemUiVisibility(uiOptions); 

      decorView.setOnSystemUiVisibilityChangeListener (new View.OnSystemUiVisibilityChangeListener() { 
       @Override 
       public void onSystemUiVisibilityChange(int visibility) { 
        if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) { 
         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); 
        } 
       } 
      }); 
     } 

你要记得添加这个方法:

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 
    if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && hasFocus) { 
     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)

此修复该问题:

private void hideNavigationBar() 
    { 
     View decorView = getWindow().getDecorView(); 
     // Hide both the navigation bar and the status bar. 
     // SYSTEM_UI_FLAG_FULLSCREEN is only available on Android 4.1 and higher, but as 
     // a general rule, you should design your app to hide the status bar whenever you 
     // hide the navigation bar. 
     int uiOptions = 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; 

     decorView.setSystemUiVisibility(uiOptions); 

    }