【问题标题】:Catching BACK key event not working while in Edit Mode (TextField = Libgdx)在编辑模式下捕获 BACK 键事件不起作用(TextField = Libgdx)
【发布时间】:2015-01-04 15:11:38
【问题描述】:

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

【问题讨论】:

  • 嘿,你修复了吗?在键盘可见时抓住后退按钮?

标签: android-layout libgdx scene2d


【解决方案1】:

嗯,这可能是我买过的最愚蠢的包,但我修好了。你只需要在 InputMultyplexer() 中的舞台和后处理器之间切换,如下所示: InputMultiplexer 多路复用器 = new InputMultiplexer(backProcessor, mStage);

似乎是这样,它使 backProcessor 优先于 mStage。

【讨论】:

    【解决方案2】:

    您可以尝试以下方法: 如下向您的 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);
        }   
       }
     }
    });
    

    【讨论】:

      【解决方案3】:
       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;
              }
          };
      

      添加监听器对我有用。 amit 接受的答案在我的情况下不起作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多