【发布时间】:2016-04-05 01:43:51
【问题描述】:
我最近意识到我应该在我的 Android 应用中隐藏导航栏并使用沉浸式模式。我遇到了一个棘手的问题,即在 Google Play 游戏的自动登录过程中创建了 OpenGL 表面。在此期间导航栏仍然可见,GLSurfaceView 会自行调整大小以解决此问题,在导航栏消失后在屏幕底部留下一个黑条。我正在使用谷歌提供的BaseGameUtils 包,这意味着我的基础Activity 扩展了所述包中的BaseGameActivity 类,因此在运行我的任何代码之前运行超类构造函数。因此,我发现自己无法确保在登录过程开始之前创建了 OpenGL ES 表面。这意味着即使我在自己的onCreate() 类的onCreate() 中设置了Window 标志SYSTEM_UI_FLAG_HIDE_NAVIGATION 和SYSTEM_UI_FLAG_IMMERSIVE_STICKY,在登录过程中仍然会弹出导航栏。我也尝试更改BaseGameActivity 中的标志,但无济于事;我相当确定问题在于出现的各种弹出窗口,这些弹出窗口似乎直接来自GoogleApiClient,我无法修改它们。
GLSurfaceView 的完整再现,例如按下主页按钮,然后返回应用程序,正确设置 Surface 大小。但是,这样做需要完全重新加载所有纹理,这在应用程序启动后是不可能发生的。我正在寻找可以让我:
- 在 Google Play 游戏登录过程开始之前创建
GLSurfaceView。我不确定这是否可能,但如果有人有相反的经验,它应该完全解决问题。 - 触发
GLSurfaceView的“重置”,因此它无需重新加载纹理即可自行调整大小,或者 - 完全阻止
BaseGameUtils包调出导航栏。
当然,也欢迎其他解决方案。
【问题讨论】:
-
如果您使用 SurfaceView 而不是 GLSurfaceView,您将完全控制 EGLSurface 的生命周期。有关多个示例,请参阅 Grafika (github.com/google/grafika)。
标签: android android-layout opengl-es google-play-games navigationbar