沉浸式模式 - 仅在没有用户交互的情况下隐藏状态栏+重新隐藏状态栏

时间:2015-10-17 14:52:48

标签: android fullscreen android-fullscreen android-statusbar android-immersive

我有一个带有2个工具栏的活动,一个在顶部,一个在底部。我使用反转模式,现在工作正常,它允许用户向下拖动状态栏...

问题是,状态栏在被拖下来后再也不会被隐藏......

我在这里找到了一些解决方案,但我无法让它发挥作用。状态栏显示在我的视图上,或者如果我打开溢出菜单或者它没有再次隐藏,它会变得混乱......

这是我目前使用的:

@Override
protected void onResume()
{
    super.onResume();
    enableFullScreenMode();
}

private void enableFullScreenMode()
{
    if (Build.VERSION.SDK_INT < 16)
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    else
        getWindow().getDecorView().setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_FULLSCREEN
//                            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
//                            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
        );
}

我想要什么

  • 始终全屏,直到用户拖动状态栏
  • 例如3s后,状态栏应该再次隐藏,如果没有打开
  • 关闭状态栏后
  • 应该再次隐藏
  • 打开工具栏中的溢出菜单时,状态栏不应显示

3 个答案:

答案 0 :(得分:0)

试试这个:

View decorView = getWindow().getDecorView();
decorView.setOnSystemUiVisibilityChangeListener
        (new View.OnSystemUiVisibilityChangeListener() {
    @Override
    public void onSystemUiVisibilityChange(int visibility) {
        // Note that system bars will only be "visible" if none of the
        // LOW_PROFILE, HIDE_NAVIGATION, or FULLSCREEN flags are set.
        if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
            // TODO: The system bars are visible. Make any desired
            // adjustments to your UI, such as showing the action bar or
            // other navigational controls.
        } else {
            // TODO: The system bars are NOT visible. Make any desired
            // adjustments to your UI, such as hiding the action bar or
            // other navigational controls.
        }
    }
});

答案 1 :(得分:0)

// 1。点击后将其放入。

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        hideSystemUI();
    }
}

private void hideSystemUI() {
    // Enables regular immersive mode.
    // For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE.
    // Or for "sticky immersive," replace it with SYSTEM_UI_FLAG_IMMERSIVE_STICKY
    View decorView = getWindow().getDecorView();
    decorView.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);
}

// 2。从布局的任何位置删除“ android:fitsSystemWindows =“ true”“。

// 3。在onResumes中添加hideSystemUI(),例如,(用于自动重新隐藏状态和底部导航)。

@Override
public void onResume() {
    super.onResume();
    hideSystemUI();
}

答案 2 :(得分:0)

答案是Sticker immersive模式。

医生说:

  

“几秒钟没有任何互动,或者用户在系统栏之外的任何位置触摸或手势,这些栏就会自动消失。”

private void hideSystemUI() {
    View decorView = getWindow().getDecorView();
    decorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                    | 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);
}