SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION无效

Tim*_*mmm 1 layout android fullscreen

我在a中使用此代码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);
Run Code Online (Sandbox Code Playgroud)

不幸的是它完全没有效果,也没有错误.我不知道要寻找什么(我感谢"它不起作用"并不是很有帮助,但我认为这是你需要使用的唯一代码行,并且因为有没有错误...)

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

Tim*_*mmm 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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)