2017-02-28 108 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); 
     } 

如果任何人有一个更简单的方法来做到这一点请邮寄和不适接受,作为一个答案,但就目前而言,这个作品,如果有人发现自己在那里我:)