在片段中,我实施了GestureDetector.SimpleOnGestureListener
,以便在检测到onSingleTapUp
时可以进入/退出沉浸式模式。
FragmentStatePagerAdapter
用于在向左/向右滑动时在这些片段之间移动。如果您进入沉浸式模式,则滑动到新片段,UI将保持沉浸式模式。
但是,在新片段的onCreateView
方法中,我需要在创建监听器时检测UI是否处于沉浸式模式。
我尝试在新视图上调用getSystemUiVisibility()
,但这会返回SYSTEM_UI_FLAG_VISIBLE
。
是否存在从任何视图或片段检测应用程序是否处于沉浸式模式的方法,无论是否已启动过渡到沉浸式模式?
答案 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
}。