退出全屏后如何重新显示状态栏+导航栏出现后不会消失
How to re-show status bar after exiting full screen + Navigation bar won't go away after appearence
我有一个以小 window 播放的视频,可以选择全屏播放。但是,问题是状态栏和导航栏 hide/show 无法正常工作。
我已经尝试了 Whosebug 中提供的几乎所有解决方案,但其中 none 有效。
这是我的 activity,它处于正确的 UI 状态:
Before Playing the video and going to full-screen
我是这样进入全屏的:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
// Hide the nav bar and status bar
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN);
这是我退出全屏的方式:
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
第一个问题是在全屏模式下状态和导航栏都被正确隐藏了。然而,第一次触摸屏幕时,导航栏将可见但不会再次隐藏(我使用的是 Leanback 模式)。可以在这里看到:
Navigation bar won't go away after the first touch in full screen
第二个问题是状态栏。当视频完成并退出全屏模式时。状态栏重叠,显示不正确。如下所示:
Status bar not shown after exiting full screen
所以终于找到了适合我的答案:
private void hideSystemUI() {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
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
);
}
private void showSystemUI() {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().getDecorView().setSystemUiVisibility(View.VISIBLE);
}
我有一个以小 window 播放的视频,可以选择全屏播放。但是,问题是状态栏和导航栏 hide/show 无法正常工作。 我已经尝试了 Whosebug 中提供的几乎所有解决方案,但其中 none 有效。 这是我的 activity,它处于正确的 UI 状态:
Before Playing the video and going to full-screen
我是这样进入全屏的:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
// Hide the nav bar and status bar
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN);
这是我退出全屏的方式:
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
第一个问题是在全屏模式下状态和导航栏都被正确隐藏了。然而,第一次触摸屏幕时,导航栏将可见但不会再次隐藏(我使用的是 Leanback 模式)。可以在这里看到:
Navigation bar won't go away after the first touch in full screen
第二个问题是状态栏。当视频完成并退出全屏模式时。状态栏重叠,显示不正确。如下所示:
Status bar not shown after exiting full screen
所以终于找到了适合我的答案:
private void hideSystemUI() {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
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
);
}
private void showSystemUI() {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().getDecorView().setSystemUiVisibility(View.VISIBLE);
}