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

时间:2019-07-18 12:38:16

标签: java android fullscreen statusbar android-fullscreen

我有一个在小窗口播放的视频,可以选择全屏播放。问题是,状态栏和导航栏的隐藏/显示无法正常工作。 我已经尝试了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

2 个答案:

答案 0 :(得分:0)

尝试这种方式

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


        btnFullScreen.setOnClickListener {
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
            window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    or View.SYSTEM_UI_FLAG_FULLSCREEN
                    or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY)

        }

        btnExitFullScreen.setOnClickListener {
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
            getWindow().getDecorView().setSystemUiVisibility(View.VISIBLE);

        }
    }
}

输出

When fullscreen

When exiting fullscreen

答案 1 :(得分:0)

所以终于找到答案对我有用:

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