您得到的答案正确推断是因为状态栏。您只需要在窗口显示启动之前摆脱状态栏。然后,您可以在设置活动的内容视图之前重置状态栏。
这样做的原因是摆脱状态栏会影响您的视图绘制,除非您动态处理所有测量、布局和绘制。如果在运行时中间这样做,将导致状态栏消失,如果您想要它再次出现,则会导致用户感到困惑。
隐藏StatusBar的方法:
在onCreate() 中:
final WindowManager.LayoutParams attrs = getWindow().getAttributes()
//Add the flag to the Window Attributes
attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN
getWindow().setAttributes(attrs)
//Disassociate Display from the Activity
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
现在您的默认显示应该正常工作。
仍然在您的onCreate()方法中:
Display display = getWindowManager().getDefaultDisplay();
int w = display.getWidth();
int h = display.getHeight();
在设置内容之前
同样,在您的onCreate()方法中:
final WindowManager.LayoutParams attrs = getWindow().getAttributes()
//Show the statubar
attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN)
getWindow().setAttributes(attrs)
// Reassociate.
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
最后:
setContentView(r.layout.myView)
前面的代码段几乎可以在任何地方使用。我考虑到你的用户体验,当然你可以随意放置它们。这些是从我的一个项目中提取的功能段落。我也在一些主屏幕启动器中看到了类似的技术。注意:根据Android版本的不同,您可能需要在onWindowAttached()中执行状态栏操作。如果您这样做,请确保仍然调用super.onWindowAttached()。
另一种技术:
当然,如果您想要这样做,您可以在清单文件中以这种方式设置活动的属性。
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"