2014-03-05 57 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); 
    } 
} 
相關問題