你能在Fragment.onCreateView中检测应用程序是否处于沉浸式模式吗?

时间:2014-03-05 21:50:35

标签: android android-fragments android-4.4-kitkat

在片段中,我实施了GestureDetector.SimpleOnGestureListener,以便在检测到onSingleTapUp时可以进入/退出沉浸式模式。

FragmentStatePagerAdapter用于在向左/向右滑动时在这些片段之间移动。如果您进入沉浸式模式,则滑动到新片段,UI将保持沉浸式模式。

但是,在新片段的onCreateView方法中,我需要在创建监听器时检测UI是否处于沉浸式模式。

我尝试在新视图上调用getSystemUiVisibility(),但这会返回SYSTEM_UI_FLAG_VISIBLE

是否存在从任何视图或片段检测应用程序是否处于沉浸式模式的方法,无论是否已启动过渡到沉浸式模式?

2 个答案:

答案 0 :(得分:5)

如果有人正在寻找更深入的答案。要检查窗口是否处于沉浸式和非沉浸式,您可以使用以下方法:

(getWindow().getDecorView().getSystemUiVisibility() & View.SYSTEM_UI_FLAG_IMMERSIVE) == View.SYSTEM_UI_FLAG_IMMERSIVE

在沉浸式和普通式之间进行交换的一个例子:

private void toggleImmersive() {
    if ((getWindow().getDecorView().getSystemUiVisibility() & View.SYSTEM_UI_FLAG_IMMERSIVE) == View.SYSTEM_UI_FLAG_IMMERSIVE) {
        getWindow().getDecorView().setSystemUiVisibility( // Go fullscreen
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
    } else {
        getWindow().getDecorView().setSystemUiVisibility( // Go immersive
                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);
    }
}

答案 1 :(得分:3)

@Mark,听起来您可能已根据我之前的评论解决了问题:使用View拥有的Activity来调用getSystemUiVisibility()而不是Fragment }。