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