java - 如何退出全屏后重新显示状态栏+导航栏出现后不会消失

标签 java android fullscreen statusbar android-fullscreen

我有一个在小窗口中播放的视频,可以选择全屏显示。然而,问题是状态栏和导航栏隐藏/显示无法正常工作。 我已经尝试了 Stackoverflow 中提供的几乎所有解决方案,但没有一个起作用。 这是我的 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);
}

关于java - 如何退出全屏后重新显示状态栏+导航栏出现后不会消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57094659/

相关文章:

java - 用java制作heroku分析工具

java - 如何在 Java 中为 true if 语句打印多个值?

android - findViewById 与 Activity 中的本地引用

android - 当 MySQL 数据库发生变化时如何通知我的 Android 应用程序

javascript - 等待请求结束FullScreen

java - @MockBean 不适用于 JUnit5 和 Spring Boot 2 的 @WebMvcTest?

java - 如何在 Android 中使用 firebase admin sdk 使用电子邮件和密码登录

android - 如何在不使用对话框的情况下在显示 Bottom Sheet 时使背景变暗?

flash - 允许 Silverlight(和 Flash)应用保持全屏

css - 在 Bootstrap 轮播中扩展图像全屏/防止扩展超过视口(viewport)