2017-02-28 6 views
1

キーボードが表示されたときに移動する必要があるアクタがあります(TextFieldを押したとき)。私はカメラを動かすことでこれを行います:LibGdx:キーボードが表示された状態でカメラを移動し、AndroidのBACKボタンをキャプチャします

stage.getViewport().getCamera().position.set(stage.getWidth()/2, stage.getHeight()/3, 0); 
stage.getViewport().getCamera().update(); 

これは問題なく動作します。また、私はTextField外の何かに触れたときに、それをバックに移動して呼び出すために正常に動作しますstage.unfocusAll();

私の問題は、私はTextFieldとプレスアンドロイド戻るボタンにいるとき、それはキーボードを隠し、ですが、コードを呼び出すことはありません。私は周りを見回したし、ときのバックボタンをキャッチすることができないという読み

InputProcessor backProcessor = new InputAdapter() { 
      @Override 
      public boolean keyDown(int keycode) { 
       if ((keycode == Input.Keys.ESCAPE) || (keycode == Input.Keys.BACK)) 
       { 
        moveBack(); 
       } 
       return false; 
      } 
     }; 

:私は(このコードは EXCEPT常に-BUTTON BACK TEXTFIELDとキーボードINSIDE見えるキャプチャ)Inputprocessor内部で持っています内部はTextFieldです。これは私の質問につながります:

  1. これは一般的なシナリオ(キーボードを操作するためのUIの移動)でなければなりません。他の人はどうしたらいいですか?
  2. 他の人が私のように(カメラを動かす)好きなら、Androidの戻るボタンはどのように扱いますか?

EDIT:TextFieldの内側に、しかし、それはAndroidのランチャーで行う必要がありながら、これanswerは、バックキーをキャプチャし、私は私が到達するために必要な要素に到達することはできません。私はまた、LibGdxプロジェクト内のBACKボタンへの他のすべての呼び出しを上書きします。

答えて

0

だから、Thisの助けを借りて、私は解決策を得ましたが、それほど美しくはありません。

基本的に私の私GDXランチャークラスを書き換え、およびレイアウトとして、次のコードを使用します。

RelativeLayout layout = new RelativeLayout(this) { 
      @Override 
      public boolean dispatchKeyEventPreIme(KeyEvent event) { 


       if(event.getKeyCode() == KeyEvent.KEYCODE_BACK) { 
        if(event.getAction() == KeyEvent.ACTION_DOWN){ 
         game.setMoveBack(true);    } 

       } 
       return super.dispatchKeyEventPreIme(event); 
      } 
     }; 

その後、私のMainScreenのレンダリング方法(他のすべての画面を継承することを画面)で、内部レンダリング方法私が呼ぶ:

if(game.isMoveBack()){ 
      stage.getViewport().getCamera().position.set(stage.getWidth()/2, stage.getHeight()/2, 0); 
      stage.getViewport().getCamera().update(); 
      game.setMoveBack(false); 
     } 

を誰もがこれを行うための簡単な方法を持っている場合は投稿し、病気の答えとしてあることを受け入れますが、誰もが自分自身を発見した場合私はどこ今のところ、これは動作します:)

してください、
関連する問題