【问题标题】:How to re-show status bar after exiting full screen + Navigation bar won't go away after appearence退出全屏后如何重新显示状态栏+导航栏出现后不会消失
【发布时间】:2019-07-18 12:38:16
【问题描述】:

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

【问题讨论】:

    标签: java android fullscreen statusbar android-fullscreen


    【解决方案1】:

    所以终于找到了适合我的答案:

    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);
    }
    

    【讨论】:

    • 如果您觉得对您有用,请随时accept my answer。 :-)
    • 应该是getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
    猜你喜欢
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    相关资源
    最近更新 更多