サイトのトップへ戻る

AndEngineドキュメント 日本語訳

チュートリアル - ソフトウェアボタンを目立たなくする方法

最近の Android 4.0 携帯の多くはソフトウェアボタン(バック、ホーム、メニュー)のみが付いています。 ハードウェアボタンと違い、ソフトウェアボタンは画面上でスペースを取ってしまい、ゲームとしては見た目があまりよくありません。 ボタンのあるバーを完全に非表示にするのは不可能ということはご存知かもしれません。

以下の方法でシステムバーを非表示にすることができます:

  1. 携帯のルートを取り、強制的にシステムバーを非表示にする - あなたのユーザー全員ができることではありません
  2. 一時的にボタンを非表示にする -画面をタッチすると再び表示されてしまいます
  3. ボタンを目立たなくする - これは Low Profile モードと呼ばれるものです。

Low Profile モードはゲームにおいてとても便利です。これを使うと以下のようになります; 左の画像が normal モード、右の画像が low profileモード:

以下がLow Profile モードを安全に実装する方法です。このメソッドはAndroid 4.0 (Ice Cream Sandwich)以降のバージョンでのみ動作確認を行っています。:


  @SuppressLint("NewApi")
  private void dimSoftButtonsIfPossible() {
    int currentapiVersion = android.os.Build.VERSION.SDK_INT;
    if (currentapiVersion >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
      getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
    } 
  }

注意: ハードウェアボタンの付いた携帯でどのように動作するかは確認できていません。誰か確認できた方は、コメントを残してください - とても有難いです :)

AndEngineでは以下のように実装すると良いでしょう:


  @Override
  public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
      // do whatever you need here
      
      dimSoftButtonsIfPossible();
    }
    return false;
  }
  
  @Override
  public void onPopulateScene(Scene pScene,
      OnPopulateSceneCallback pOnPopulateSceneCallback)
      throws IOException {
    // do whatever you need here
    
    runOnUiThread(new Runnable() {
      
      @Override
      public void run() {
        dimSoftButtonsIfPossible();
      }
    });
    pOnPopulateSceneCallback.onPopulateSceneFinished();
  }
  
  @Override
  public synchronized void onResumeGame() {
    super.onResumeGame();
    // do whatever you need here
        
    runOnUiThread(new Runnable() {
      
      @Override
      public void run() {
        dimSoftButtonsIfPossible();
      }
    });

  }