2017-02-28 103 views
1

我有需要移動的演員,當鍵盤變得可見(當我按TextField),或者他們被困在它後面。我這樣做是通過移動相機起來:LibGdx:移動相機,鍵盤可見,捕捉Android後退按鈕

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

這工作得很好。它也能正常工作,將其移動回來時,我摸東西TextField外,並呼籲stage.unfocusAll();

我的問題是,當我在TextField並按機器人會後退按鈕是,它隱藏了鍵盤,但不調用的代碼我有Inputprocessor內(此代碼後退按鈕捕捉總是除非裏面的時候一個文本框和鍵盤的可見):

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

我環顧四周,看它是無法趕上後退按鈕時裏面有一個TextField。這導致我的問題:

  1. 這必須是一個常見的情況(移動用戶界面與鍵盤一起工作),其他人怎麼做呢?
  2. 如果其他人喜歡我(移動相機),你如何處理Android後退按鈕?

編輯:這answer捕捉背鍵而TextField裏面,但是它在Android啓動工作要做,所以我不能達到我需要達到的元素。我還覆蓋了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); 
     } 

如果任何人有一個更簡單的方法來做到這一點請郵寄和不適接受,作爲一個答案,但就目前而言,這個作品,如果有人發現自己在那裏我:)