我在 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...
,在多个地方、在计时器上等等。那行代码确实达到了,但是它根本不做任何事情。
哦,太可笑了。阅读源代码后——这通常是在 Android 领域找到答案的唯一途径——我发现了以下未记录的事实:
setSystemUiVisibility() 仅当您调用它的 View 可见时才有效!
甚至更多:您调用 setSystemUiVisibility() 的 View 必须保持可见,导航栏才能保持隐藏状态。感谢记录这些人,真的很棒。
这里是相关代码,在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;
}
}
}