2013-12-12 21 views
5

Nexus 4 KitKat 4.4と で開発中です。IMMERSIVE MODEをゲームに追加しようとしています。 glViewportを正しく設定するには画面の高さが必要です。Android、GL、IM_MERSIVE MODEの画面サイズ

は以前、私はそれはIMMERSIVE MODEで画面の実際の高さを返しません

@SuppressWarnings("deprecation") 
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2) 
public static int getScreenHeight() { 
    if (Main.m_activity == null) 
     return -1; 
    Display display = Main.m_activity.getWindowManager() 
      .getDefaultDisplay(); 
    int height = -1; 

    if(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB){ 
     //width = display.getWidth(); // deprecated 
     height = display.getHeight(); // deprecated 
    }else{ 
     Point size = new Point(); 
     display.getSize(size); 
     height = size.y; 
    } 
    return height; 

} 

を使用しました。

だから私は

private static class Renderer implements GLSurfaceView.Renderer { 
    public void onSurfaceChanged(GL10 gl, int width, int height) { 

からの値を使用することを開始し、アプリが起動したとき、それはうまく働きました。私は、ホームボタンを押すとゲームonSurfaceChangedに戻った後、ホーム画面に戻っている場合、再びが、古い間違った値で呼び出されます(非没入モードの画面サイズ、小さく、通常の)

没入型画面サイズが800x1280 REGULARサイズが800x1184であります

普通のサイズになったらglViewportに設定すると、画面の上部に黒い線が表示されます。

PSIMMERSIVE MODEは、ボリュームボタンを押すと消えます。

PS2

私は、メソッドの独自の実装を次のようしています。スクリーン/ウィンドウのサイズ変更を処理するのには役立ちません。

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
+0

@payeliタグを不必要に「改善」しないようにしてください。 kitkatには既に2つのタグがありますが、3つ目は必要ありませんでした。 – Charles

答えて

3

いい記事ですがまだ十分ではありません。 http://developer.android.com/training/system-ui/immersive.html

今、私たちは

public void onSurfaceChanged(GL10 gl, int width, int height) { 

で画面サイズを取得し、高さが、その後減少した場合、我々は、1秒の遅延で再び没入モードを有効にします。 これは動作しますが、ハッキーです。私は標準的な解決方法を探します。

私はKitKatでちょうどバギーです。 私は没入型モードを実装した有名人タイトルはありません。 (もちろん私たちのアプリを除く)))

+0

私は一般的にそのような遅れた電話が好きではありません。 – Max

4

Display.getRealSizeを使用すると、システムウィンドウなしで画面境界を戻すことができます。

+0

私がそのようにすると、ボリュームボタンを押すと没入型モードが失われます。 Display.getRealSizeはまだ画面サイズを与えます。 – Max

3

没入型モードが無効/有効になっている場合は、View.OnSystemUiVisibilityChangeListenerを使用してコールバックを取得できます。これを使用して、画面の実際の高さを知ることができます。

+0

ユーザーがハードウェアボタンを使用してデバイスのボリュームを変更し、ダイアログがアプリケーションの上に表示されると機能しますか?私のテストでは、没入型アプリケーションを開いた後にユーザーが最初に行う操作が、ハードウェアボタンで音量を変更している場合、アプリの可視性は変更されません。 – mmathieum

関連する問題