当我在最近的手机和平板电脑上运行Android应用程序时,我正在设置“熄灯”模式。在我的onCreate()方法中,我添加了:在重新启动时维护“熄灯”模式(View.setSystemUiVisibility)
View rootView = getWindow().getDecorView();
rootView.setSystemUiVisibility(View.STATUS_BAR_HIDDEN); // aka View.SYSTEM_UI_FLAG_LOW_PROFILE
这比我想象的要好。在我的Android 3.2平板电脑上,状态栏以低配置文件模式启动(条上的所有按钮均被点替换)。如果我与栏上的按钮交互就会变成正常的,然后回去低调的模式之后(例如,如果我从状态栏查看配置/通知窗口)。所以看起来这是我的应用程序的一个属性,而不是直接隐藏UI的“命令”。
有没有被处理的两个角落的情况下,虽然。首先,如果用户点击状态栏而不点击任何点,则该栏会变为活动状态。除非用户实际上与栏上的某些内容交互(例如查看通知或截取屏幕截图),否则它永远不会回到低调模式。所以,如果他们回到与我的应用进行交互,状态栏不再处于低调模式。 (Gallery应用程序似乎也有这个问题,所以也许它不仅仅是我。)第二个角落案例是来自锁定屏幕的简历。如果我点击电源按钮锁定平板电脑,然后解锁并恢复应用程序,状态栏将完全可见(并且与其交互不会改变任何内容)。 (Gallery应用程序没有这个问题。)
一些博客文章表明,我可以设置一个处理程序来侦听系统UI可见性更改,然后在UI显示时重新隐藏UI。就像这样:
rootView.setOnSystemUiVisibilityChangeListener(
new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
if (visibility == View.STATUS_BAR_VISIBLE) {
game.flagUIIsVisible();
}
}
});
在我的情况下,game
对象的方法只是设置一个标志说的UI就看不见。以后,如果有我的应用程序内的任何触摸事件(它们是由同一个game
对象处理),并设置了此标志,然后我再次调用STATUS_BAR_HIDDEN电话。
但是,使用这些回调函数时,UI上没有可见的影响。我可以看到正确的处理程序正在从某些日志消息中调用,并且我可以看到正在调用该侦听程序。
我也尝试过在我的onResume
路径中调用STATUS_BAR_HIDDEN调用,但这也没有什么不同。
我正在寻找信息,这是某种已知的错误,或提示画廊应用程序可能在做什么(假设它做了不同的事情)。或者尝试其他API的建议(或其他可能相关的细节)。
我正在使用libGDX,而我的应用只有一个视图,所以它非常简单。该视图也设置为全屏,没有libGDX的标题。我的清单中我的targetSdkVersion设置为15。
+1,这个固定我的问题D: – Houssni