LibGdx:在键盘可见的情况下移动相机,捕捉Android BACK按钮

时间:2017-02-28 13:56:24

标签: android libgdx

当键盘变得可见时(当我按下TextField时)或者它们被卡在后面时,我需要移动Actors。我通过移动相机来做到这一点:

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

这很好用。当我触摸TextField之外的某些内容并调用stage.unfocusAll();

时,它也可以正常移动

我的问题是,当我在TextField并按下Androids Back按钮时,它会隐藏键盘,但不会调用我在输入处理器中的代码(此代码捕获后按钮总是 EXCEPT 在文本字段和键盘内部可见时:

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

我环顾四周,看到在TextField内部时无法捕捉到后退按钮。这引出了我的问题:

  1. 这必须是一个常见的场景(移动UI以使用键盘),其他人如何做到这一点?
  2. 如果其他人喜欢我(移动相机),你如何处理Android后退按钮?
  3. 编辑:此answer会在TextField内捕获后退密钥,但必须在Android启动器中完成,因此无法覆盖我需要访问的元素。我还会从LibGdx项目中覆盖对BACK按钮的所有其他调用。

1 个答案:

答案 0 :(得分:0)

好的,在This的帮助下,我得到了一个解决方案,但它并不是很漂亮。

基本上我重写了我的GDX Launcher类,并使用以下代码作为布局:

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的渲染方法(所有其他Screen继承的屏幕)中,在我调用的render-method中:

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

如果有人有更简单的方法可以做到这一点,请发帖,我会接受这个作为答案,但是现在,如果有人发现自己在哪里,这是有效的:)