一个星期以来,我一直在绞尽脑汁尝试左右的事情,但似乎找不到答案。我可能实际上还有更多问题。
我们有一个应用程序在其活动之一中使用Unity视图来呈现一些图形。由于这是一个普通的应用程序,而不是游戏,因此我们希望删除沉浸式模式和全屏模式,以便我们可以重新获得系统栏(状态和导航)
现在,从Unity的最新版本开始,他们在Android的播放器设置中添加了Start in fullscreen mode
选项。问题在于上述选项仅带回导航栏。
下一步是尝试带回一些本地Android编码。所以基本上这样:
this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
完成工作并带回状态栏。
现在,直到我使用高纵横比(18.5:9-Pixel 3 XL-Android 9)设备之前,它都像魅力一样发挥作用。
如果仅使用Unity全屏选项进行处理,图形可以很好地缩放,但是我没有状态栏,这对于带槽手机更加明显:
如果我从Android删除了全屏标志,那么我会返回状态栏,但渲染会中断:
???
是出现的黑色区域。
对不起,我无法向您显示实际的应用程序。
现在,我玩了所谓的“沉浸模式”的其他标志:
// When init of Unity
this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
this.showSystemUi();
this.addUiVisibilityChangeListener();
// What the above does
private static int getLowProfileFlag() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT ? View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
View.SYSTEM_UI_FLAG_FULLSCREEN : View.SYSTEM_UI_FLAG_LOW_PROFILE;
}
private void showSystemUi() {
this.mUnityPlayer.setSystemUiVisibility(this.mUnityPlayer.getSystemUiVisibility() & ~getLowProfileFlag());
}
private void addUiVisibilityChangeListener() {
this.mUnityPlayer.setOnSystemUiVisibilityChangeListener(visibility -> RadarOverviewActivity.this.showSystemUi());
}
,并且在某些情况下,图形区域上方会出现类似大小的黑条。
最后,当黑条出现时,本机UI也将中断。对于底部栏,应该有一些工具在图形实际开始的位置被向上推。底部的黑色栏是UnityPlayer的一部分,因为触摸那里实际上可能导致与图形的交互。顶部栏在其中时甚至更奇怪。该区域实际上是本机工具栏应该存在的位置,并且在某种程度上也是如此。无法看到它,但是触摸那里会触发UI事件!!!看起来,当非全屏显示时,Unity视图无法正确放置自身,因为本机UI最初正确显示,但是当Unity踢入时,一切都变得很奇怪。再次指出关注点。这仅在高方面的设备中发生。 16:9设备似乎没有问题。
所以主要问题是,如何在状态栏出现且不破坏Unity渲染高处的情况下,将应用从全屏模式中移除?
答案 0 :(得分:0)
我不是100%知道为什么,但是其他人似乎有这个问题,尤其是Android9。更新到Unity 2019.1.5f1实际上为我解决了这个问题。
我正在将这个答案发布给其他可能需要但尚未接受的人。我首先要确保问题出在哪里。我将进行相应的更新。