LibGDX - 如何在Android键盘可见的TextField中捕捉后退按钮?

时间:2016-08-10 17:51:41

标签: android input libgdx android-softkeyboard back-button

我正在尝试捕捉TextField聚焦时的Back按钮(键盘可见)。

我已尝试使用Multiplexer - 设置' BackProcessor'在阶段的顶部 - 它不起作用:

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

            if ((keycode == Input.Keys.BACK) )
            {
                Gdx.app.log("INPUT", "BACK");
            }
            return false;
        }
    };

    InputMultiplexer multiplexer = new InputMultiplexer(backProcessor,
            loginStage,registerStage);
    Gdx.input.setInputProcessor(multiplexer);

另外,我尝试使用render方法:

if(Gdx.input.isKeyDown(Keys.BACK)

也不行。

当键盘可见时,上述解决方案完美地工作 EXCEPT

我想要实现的目标 当onScreenKeyboard可见时,我需要捕捉后退按钮。

修改

我也试过了TextFieldListener但是' BackButton'是一个没有任何“焦炭代码”的钥匙。所以它不能被抓到那里:

public void keyTyped(TextField textField, char c)

最终编辑

正如LibGDX的作者所说 - 没有办法以正常方式检索这一点导致后退按钮在应用程序之外被截获,而当键盘可见时它被按下。 Android解决方案是覆盖EditText onPreKeyIme(),但LibGDX TextField与Android无关,而且没有连接。

如果有人能指出解决这个问题的任何方法,我将不胜感激。

2 个答案:

答案 0 :(得分:0)

答案是 - 不可能。键盘处于活动状态时,Android无法捕捉后退按钮。哈。他们甚至没有办法检查软键盘是否可见,并且有一些技巧可以捕捉它的视图高度(这给出了键盘高度),这也会使一切都变得错误,因为它会发生碰撞与其他ui组件,如导航/状态栏和整个沉浸式模式。

我希望有一天Google Dev会在这里查看,检查一下并考虑在6年后解决这个问题,因为我们在2016年会修复代码风格而不是发布的关键错误来自这里的最伟大的编码员跟踪器。

答案 1 :(得分:0)

使用本教程重写GDX Launcher类: https://github.com/libgdx/libgdx/wiki/Admob-in-libgdx

然后,您将拥有RelativeLayout,以便覆盖dispatchKeyEventPreIme()方法 它将在发送到IME之前捕获事件;)

RelativeLayout layout = new RelativeLayout(this) {
            @Override
            public boolean dispatchKeyEventPreIme(KeyEvent event) {


                if(event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
                    if(event.getAction() == KeyEvent.ACTION_DOWN){
                        // back pressed                 }

                }
                return super.dispatchKeyEventPreIme(event);
            }
        };