SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION无效

时间:2012-12-14 22:42:46

标签: android layout fullscreen

我在VideoView内使用此代码试图隐藏运行Android(CyanogenMod)4.1的触控板上的导航栏。

    setSystemUiVisibility(SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | SYSTEM_UI_FLAG_FULLSCREEN
            | SYSTEM_UI_FLAG_HIDE_NAVIGATION);

不幸的是它根本没有效果,并且没有错误。我不知道该寻找什么(我欣赏“它不起作用”并不是很有帮助,但我的印象是,这是你需要使用的唯一代码行,并且因为有没有错误...)

我尝试了各种各样的变体 - getWindow().getDecorView().setSystemUiVi...,在多个地方,在计时器等处进行。这段代码肯定已经达到,但它根本没有做任何事情。

1 个答案:

答案 0 :(得分:6)

哦,多么荒谬。在阅读了源代码 - 这通常是在Android-land中查找内容的唯一方法之后 - 我发现了以下未记录的事实:

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;
        }
    }
}