当键盘变得可见时(当我按下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
内部时无法捕捉到后退按钮。这引出了我的问题:
编辑:此answer会在TextField
内捕获后退密钥,但必须在Android启动器中完成,因此无法覆盖我需要访问的元素。我还会从LibGdx项目中覆盖对BACK按钮的所有其他调用。
答案 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);
}
如果有人有更简单的方法可以做到这一点,请发帖,我会接受这个作为答案,但是现在,如果有人发现自己在哪里,这是有效的:)