2012-12-14 139 views
1

我在VideoView裏面使用這段代碼試圖隱藏運行Android(CyanogenMod)4.1的觸摸板上的導航欄。SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION沒有效果

setSystemUiVisibility(SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
      | SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
      | SYSTEM_UI_FLAG_FULLSCREEN 
      | SYSTEM_UI_FLAG_HIDE_NAVIGATION); 

不幸的是,它根本沒有任何影響,也沒有出現任何錯誤。我不知道要尋找什麼(並且我明白「它不起作用」並不是很有幫助,但我認爲這是您需要使用的唯一代碼行,並且因爲存在沒有錯誤...)

我試過各種變化 - getWindow().getDecorView().setSystemUiVi...,在多個地方,在一個計時器等。這行代碼是絕對達到,但它根本沒有任何事情。

+0

嘗試'setSystemUiVisibility(SYSTEM_UI_FLAG_FULLSCREEN | SYSTEM_UI_FLAG_HIDE_NAVIGATION);' – Karakuri

+0

沒有影響;我嘗試了大多數組合。 – Timmmm

回答

6

哦,這太可笑了。在閱讀源代碼 - 這往往是唯一的方式來發現Android的土地 - 我發現了以下無證事實:

setSystemUiVisibility()只有當你調用它的視圖是可見的時候纔有效果!

甚至更​​多:您可以通過調用setSystemUiVisibility()必須的視圖保持可見,以便導航欄保持隱藏狀態。感謝記錄這些傢伙,真的很棒。

以下是相關的代碼,在View.java

void performCollectViewAttributes(AttachInfo attachInfo, int visibility) { 
    if ((visibility & VISIBILITY_MASK) == VISIBLE) { 
     if ((mViewFlags & KEEP_SCREEN_ON) == KEEP_SCREEN_ON) { 
      attachInfo.mKeepScreenOn = true; 
     } 
     attachInfo.mSystemUiVisibility |= mSystemUiVisibility; 
     ListenerInfo li = mListenerInfo; 
     if (li != null && li.mOnSystemUiVisibilityChangeListener != null) { 
      attachInfo.mHasSystemUiListeners = true; 
     } 
    } 
}