2014-03-05 56 views
3

在一个片段中,我实现了一个GestureDetector.SimpleOnGestureListener,这样我就可以在检测到onSingleTapUp时进入/退出沉浸式模式。您可以检测应用程序是否处于Fragment.onCreateView的沉浸式模式?

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

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

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

是否有一种方法可以检测应用程序是否处于任何视图或片段的沉浸式模式,无论是否启动向沉浸式模式的转换?

+0

你叫'getSystemUiVisibility() '从'Fragment'中的'View',或者通过附加到父Activity'布局的'View'?这些文档并不清楚,但我想知道如果使用一个视图(即使是0大小或不可见,但不会消失),那么附加到“Activity”的视图会正确报告。 –

+0

@LarrySchiefer我在与'Fragment'关联的'View'上调用get/setSystemUiVisibility()。使用'getActivity()。getWindow()。getDecorView()''返回的'View'可以让我访问片段之间的可见性。随意添加您的评论作为答案。 – Mark

回答

2

@马克,这听起来像它解决了基于我以前的评论,你可能得到:使用由Activity拥有的View调用getSystemUiVisibility(),而不是Fragment

2

如果有人正在寻找更深入的答案。要检查窗口是身临其境的对非身临其境,你可以做一些事情用途:

(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); 
    } 
} 
相关问题