2

我在 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);

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

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

4

1 回答 1

8

哦,多么可笑。在阅读了源代码之后——这通常是在 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;
        }
    }
}
于 2013-01-06T16:14:55.143 回答