最近、Androidのアプリでナビゲーションバーを非表示にして没入型モードを使用する必要があることに気付きました。私は、Google Playゲームの自動ログインプロセス中にOpenGLサーフェスが作成されるという難しい問題に遭遇しました。ナビゲーションバーはこの間に引き続き表示され、GLSurfaceView
自体がこれを考慮してサイズ変更され、ナビゲーションバーが消えた後に画面の下部に黒いバーが残ります。 Googleが提供するBaseGameUtilsパッケージを使用しています。つまり、ベースActivity
がBaseGameActivity
クラスを前記パッケージから拡張しているため、コードを実行する前にスーパークラスのコンストラクタを実行しています。したがって、ログインプロセスが始まる前にOpenGL ESサーフェスが作成されていることを確認できません。これは、私が自分のActivity
クラスのonCreate()
にWindow
のフラグSYSTEM_UI_FLAG_HIDE_NAVIGATION
とSYSTEM_UI_FLAG_IMMERSIVE_STICKY
を設定しても、ログイン処理中にナビゲーションバーが表示されることを意味します。私もBaseGameActivity
のフラグを変更しようとしましたが、無駄です。私はかなり問題があるのは、私がそれらを修正することができないGoogleApiClient
から直接来るように思われる様々なポップアップにあると確信しています。OpenGL ESのサーフェスサイズ、非表示のAndroidソフトウェアナビゲーションバー、Google Playゲーム
GLSurfaceView
を完全に再作成すると、ホームボタンを押してからアプリに戻るなど、Surface
のサイズが正しく設定されます。しかし、これを行うには、すべてのテクスチャを完全にリロードする必要があります。これは、アプリが既に開始されてからはできません。
- Google Playゲームのログインプロセスが開始される前に
GLSurfaceView
を作成してください。私はこれがまったく可能であるとは確信していませんが、誰かが逆の経験を持っていれば、問題を完全に解決するはずです。 - トリガー全くナビゲーションバーの立ち上げから
BaseGameUtils
パッケージを停止し、それはテクスチャをリロードすることなく、自分自身のサイズを変更するので、GLSurfaceView
の「リセット」、または - 。
他の解決策ももちろん歓迎されています。
GLSurfaceViewではなくSurfaceViewを使用すると、EGLSurfaceの寿命を完全に制御できます。複数の例については、Grafika(https://github.com/google/grafika)を参照してください。 – fadden