setSystemUiVisibility(SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION)不工作 [英] setSystemUiVisibility(SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) does not work
问题描述
我一直在解决与setSystemUiVisibility()来试图隐藏软导航按钮一段时间(对于视频播放器)。它似乎并不工作作为标榜。这是我的code,内可见的FrameLayout
。
I've been battling with setSystemUiVisibility() to try to hide the soft navigation buttons for a while (for a video player). It does not seem to work as advertised. Here is my code, inside a visible FrameLayout
.
void setNavVisibility(boolean visible)
{
int newVis = SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
if (!visible)
{
newVis |= SYSTEM_UI_FLAG_LOW_PROFILE | SYSTEM_UI_FLAG_HIDE_NAVIGATION;
}
setSystemUiVisibility(newVis);
}
略从SDK的例子修改:
Slightly modified from the SDK example:
void setNavVisibility(boolean visible) {
int newVis = SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| SYSTEM_UI_FLAG_LAYOUT_STABLE;
if (!visible) {
newVis |= SYSTEM_UI_FLAG_LOW_PROFILE | SYSTEM_UI_FLAG_FULLSCREEN
| SYSTEM_UI_FLAG_HIDE_NAVIGATION;
}
无论是调用的时候做任何事情。我取得了一些成功,当我从一个不同的查看
骂他们,但文件没有提到的查看
您呼吁从有什么影响?我认为该文件是(意外惊喜)在这里有点欠缺。没有人知道到底发生了什么呢?
Neither do anything when called. I had some success when I called them from a different View
, but the documentation doesn't mention that the View
you are calling from has any effect? I assume that the documentation is (surprise surprise) somewhat lacking here. Does anyone know what's really going on?
推荐答案
嗯,显然我duplicated !我自己的问题但无论如何,我找到了答案:读取源$ C $ C之后 - 这往往是找东西在Android的土地的唯一途径 - 我发现下面的无证事实:
Hmm apparently I duplicated my own question! But anyway I found the answer: After reading the source code - which is often the only way to find things out in Android-land - I discovered the following undocumented fact:
setSystemUiVisibility()只具有效力,当你从调用它的观点是可见的!
更:视图中调用setSystemUiVisibility()必须的继续的的导航栏可以看到保持隐藏。感谢您记录的家伙,真是太好了。
Even more: The view in which you call setSystemUiVisibility() must remain visible for the nav bar to remain hidden. Thanks for documenting that guys, really great.
下面是相关code,在 View.java
。
Here is the relevant code, in 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;
}
}
}
这篇关于setSystemUiVisibility(SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION)不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!