在编辑模式下捕获 BACK 键事件不起作用(TextField = Libgdx)

Catching BACK key event not working while in Edit Mode (TextField = Libgdx)

我正在尝试在按下 BACK 键后立即调用一个方法。我试图在编辑模式下执行此操作(当使用 Scene2D 、libgdx 将文本写入 TextField 时),因此当我执行此操作时键盘按钮将出现。使用设置为舞台的简单 InputProcessor,或什至 InputMultiplexer,似乎这两种方式都不起作用。在系统键盘从屏幕上消失后,系统以某种方式捕获事件和 returns false。

使用的第一种方法:

@Override
public void create() {
     ...
     Gdx.input.setCatchBackKey(true);
     ...
}

@Override
public boolean keyDown(int keycode) {
     ...
     if(keycode == Keys.BACK){
        // Optional back button handling (e.g. ask for confirmation)
        ...
        if (shouldReallyQuit)
          Gdx.app.exit();
     }
     return false;
}

使用的第二种方法:

InputProcessor backProcessor = new InputAdapter() {
    @Override
    public boolean keyDown(int keycode) {

        if ((keycode == Keys.ESCAPE) || (keycode == Keys.BACK))

            // Some code

        return false;
    }
};
InputMultiplexer multiplexer = new InputMultiplexer(mStage,
        backProcessor);
Gdx.input.setInputProcessor(multiplexer);

这可能是什么问题?

另外,TextField 文本框没有setOnEditorActionListener 方法来解决上述问题。

您可以尝试以下方法: 如下所示将侦听器添加到您的 textField,它捕获回车键,然后隐藏键盘失去焦点。之后就可以正常接BACK键了

    textField.setTextFieldListener(new TextField.TextFieldListener() {
    public void keyTyped(TextField textField, char key) {
    if (key == '\n' || key == '\r') {
     textField.getOnscreenKeyboard().show(false);
     getStage().setKeyboardFocus(null);
    }   
   }
 }
});

好吧,这可能是我有过的最愚蠢的包,但我修好了。你只需要像这样在 InputMultiplexer() 中的阶段和后台处理器之间切换: InputMultiplexer 多路复用器 = new InputMultiplexer(backProcessor, mStage);

似乎是这样让 backProcessor 优先于 mStage。

 private EventListener textListener = new EventListener() {
        @Override
        public boolean handle(Event event) {
            if (event instanceof InputEvent) {
                if (((InputEvent) event).getType() == InputEvent.Type.keyDown && ((InputEvent) event).getKeyCode() == Input.Keys.BACK) {
                    ((TextField)event.getListenerActor()).getOnscreenKeyboard().show(false);
                    stage.setKeyboardFocus(null);
                }
            }
            return false;
        }
    };

添加监听器对我有用。阿米特接受的答案对我不起作用。