How to hide status bar and bottom navigation bar when Android pops up Dialog

  • 2021-11-10 10:49:26
  • OfStack

Upper code


dialog.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
dialog.getWindow().getDecorView().setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
     @Override
     public void onSystemUiVisibilityChange(int visibility) {
         int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
         // The layout is below the status bar 
         View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
         // Full screen 
         View.SYSTEM_UI_FLAG_FULLSCREEN |
         // Hide the navigation bar 
         View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
         View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
         uiOptions |= 0x00001000;
         dialog.getWindow().getDecorView().setSystemUiVisibility(uiOptions);
     }
});

ps: Let's take a look at Android. Dialog does not display navigation bar when it pops up (immersive)

Our app is full-screen immersive. It is found that after activity is set in full screen, the navigation bar virtual key will pop up at the bottom of dialog. The specific reason is that Window of Dialog steals the focus, and DecorView state change of Window leads to exit.

Solution, in Dialog:


private void fullScreenImmersive(View view) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
      int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        | View.SYSTEM_UI_FLAG_FULLSCREEN;
      view.setSystemUiVisibility(uiOptions);
    }
  }

  @Override
  public void show() {
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
    super.show();
    fullScreenImmersive(getWindow().getDecorView());
    this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
  }

Summarize


Related articles: