Android 沉浸式模式-仅隐藏状态栏+;在没有用户交互的情况下经过一段时间后重新放置状态栏

Android 沉浸式模式-仅隐藏状态栏+;在没有用户交互的情况下经过一段时间后重新放置状态栏,android,fullscreen,android-fullscreen,android-statusbar,android-immersive,Android,Fullscreen,Android Fullscreen,Android Statusbar,Android Immersive,我有一个带有两个工具栏的活动,一个在顶部,一个在底部。我使用反向模式,现在效果很好,它允许用户向下拖动状态栏 问题是,状态栏在被拖下来后再也不会隐藏 我在这里找到了一些解决方案,但我就是无法让它工作。要么状态栏显示在我的视图上,要么如果我打开“溢出”菜单,它就会出错,要么它不会再次隐藏 这是我目前使用的: @Override protected void onResume() { super.onResume(); enableFullScreenMode(); } priva

我有一个带有两个工具栏的活动,一个在顶部,一个在底部。我使用反向模式,现在效果很好,它允许用户向下拖动状态栏

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

我在这里找到了一些解决方案,但我就是无法让它工作。要么状态栏显示在我的视图上,要么如果我打开“溢出”菜单,它就会出错,要么它不会再次隐藏

这是我目前使用的:

@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
        );
}
@覆盖
受保护的void onResume()
{
super.onResume();
enableFullScreenMode();
}
私有void启用FullScreenMode()
{
如果(Build.VERSION.SDK_INT<16)
getWindow().setFlags(WindowManager.LayoutParams.FLAG_全屏,WindowManager.LayoutParams.FLAG_全屏);
其他的
getWindow().getDecorView().SetSystemActivity(
View.SYSTEM\u UI\u FLAG\u全屏显示
//| View.SYSTEM_UI_FLAG_布局_全屏
//| View.SYSTEM_UI_FLAG_HIDE_导航
);
}
我想要什么

  • 始终全屏显示,直到用户拖动状态栏
  • 例如,3秒钟后,如果状态栏未打开,则应再次隐藏状态栏
  • 关闭状态栏后,应再次将其隐藏
  • 在工具栏中打开“我的溢出”菜单时,状态栏不应显示
试试这个:

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.
        }
    }
});
试试这个:

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.
        }
    }
});
试试这个:

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.
        }
    }
});
试试这个:

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.单击后放置此项

@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.在OnResume中添加hideSystemUI(),如下所示(例如,自动重新隐藏状态和底部导航)


//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.在OnResume中添加hideSystemUI(),如下所示(例如,自动重新隐藏状态和底部导航)


//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.在OnResume中添加hideSystemUI(),如下所示(例如,自动重新隐藏状态和底部导航)


//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.在OnResume中添加hideSystemUI(),如下所示(例如,自动重新隐藏状态和底部导航)

答案是,模式

正如医生所说:

“在几秒钟没有交互后,或者当用户触摸或示意系统栏外的任何位置时,这些栏就会自动消失。”

private void hideSystemUI(){
View decorView=getWindow().getDecorView();
decorView.setsystemivilibility(
View.SYSTEM\u UI\u FLAG\u沉浸式\u粘性
|View.SYSTEM\u UI\u FLAG\u布局\u稳定
|View.SYSTEM\u UI\u FLAG\u布局\u隐藏\u导航
|View.SYSTEM\u UI\u FLAG\u布局\u全屏显示
|View.SYSTEM\u UI\u FLAG\u HIDE\u导航
|视图。系统(用户界面、标志、全屏);
}
答案是,模式

正如医生所说:

“在几秒钟没有交互后,或者当用户触摸或示意系统栏外的任何位置时,这些栏就会自动消失。”

private void hideSystemUI(){
View decorView=getWindow().getDecorView();
decorView.setsystemivilibility(
View.SYSTEM\u UI\u FLAG\u沉浸式\u粘性
|View.SYSTEM\u UI\u FLAG\u布局\u稳定
|View.SYSTEM\u UI\u FLAG\u布局\u隐藏\u导航
|View.SYSTEM\u UI\u FLAG\u布局\u全屏显示
|View.SYSTEM\u UI\u FLAG\u HIDE\u导航
|视图。系统(用户界面、标志、全屏);
}
答案是,模式

正如医生所说:

“在几秒钟没有交互后,或者当用户触摸或示意系统栏外的任何位置时,这些栏就会自动消失。”

private void hideSystemUI(){
View decorView=getWindow().getDecorView();
decorView.setsystemivilibility(
View.SYSTEM\u UI\u FLAG\u沉浸式\u粘性
|View.SYSTEM\u UI\u FLAG\u布局\u稳定
|View.SYSTEM\u UI\u FLAG\u布局\u隐藏\u导航
|View.SYSTEM\u UI\u FLAG\u布局\u全屏显示
|View.SYSTEM\u UI\u FLAG\u HIDE\u导航
|视图。系统(用户界面、标志、全屏);
}
答案是,模式

正如医生所说:

“在几秒钟没有交互后,或者当用户触摸或示意系统栏外的任何位置时,这些栏就会自动消失。”

private void hideSystemUI(){
View decorView=getWindow().getDecorView();
decorView.setsystemivilibility(
View.SYSTEM\u UI\u FLAG\u沉浸式\u粘性
|View.SYSTEM\u UI\u FLAG\u布局\u稳定
|View.SYSTEM\u UI\u FLAG\u布局\u隐藏\u导航
|View.SYSTEM\u UI\u FLAG\u布局\u全屏显示
|View.SYSTEM\u UI\u FLAG\u HIDE\u导航
|视图。系统(用户界面、标志、全屏);
}

德语注释…删除了单个注释。。。不过,吹毛求疵、毫无成效的评论……公平地说,我正在处理同一个问题,当我找到解决方案时,我会把它发给你;)那太好了。目前我已经实现了一个有效的解决方案,但是状态栏不再自动隐藏(我不知道它何时显示,所以我无法触发调用hide函数)。所以它一直可见,直到用户再次点击屏幕。。。这是德国评论…删除了单个评论。。。不过,吹毛求疵、毫无成效的评论……公平地说,我正在处理同一个问题,当我找到解决方案时,我会把它发给你;)那太好了。目前我已经实现了一个有效的解决方案,但是状态栏不是hidi