2

我无法在我的 TextField(libgdx 中的 scene2d ui 元素)侦听器中注册 android“删除”键。这是我定义文本字段的代码:

    nameTextfield = new TextField("", skin);
    nameTextfield.setMessageText("Some Text");

    uiStage.addActor(nameTextfield);

我试过这个监听器只是为了解码 DELETE 键的键码:

    nameTextfield.setTextFieldListener(new TextFieldListener() {
        public void keyTyped (TextField textField, char key) {
            textField.setText(String.valueOf(Integer.valueOf(key)));

        }
    });

尽管它为几乎所有按钮提供了代码,但它甚至对 DELETE 按钮都没有反应。

我在 Nexus 7 上对此进行了测试。

4

4 回答 4

2

TextField.java 源代码看来,“DELETE”(和“BACKSPACE”、“TAB”和其他几个键)是由 TextField 专门处理的。这些密钥永远不会转发给任何侦听器。

内置处理程序应该做“正确的事情”(从字符串内容中删除字符)。

删除是否以某种方式对您的情况不正确,导致您尝试对其进行解码?

于 2013-01-21T00:16:04.510 回答
0

最新的夜间版本的 libgdx 解决了这个问题,这个问题在以下链接中是已知和讨论的: nexus button

于 2014-01-27T08:45:05.010 回答
0

那么 DELETE 按钮应该以不同的方式实现。

我建议尝试验证按下的键是否是 DELETE 按钮。如果是,您只需textField.getText()将最后一个字母剪掉,然后用 . 设置新文本setText

我确信有一种更优雅的方法可以做到这一点,但这是我能想到的唯一解决方法。毕竟, DELETE 并不是真正可以放入的字符setText。是吗?:/

后期编辑:

在侦听器中打印key变量,在此处放置一个断点,然后查看分配给它的值。

然后还打印(或查看 javadoc)KeyEvent.KEYCODE_DEL此处的文档)以查看此值的值。

于 2013-01-20T23:12:00.060 回答
0

解决此问题的最佳方法如下:

您将需要收听来自另一个侦听器的输入,例如同一屏幕。

MainMenuScreen implements Screen, InputProcessor

那么你需要创建一个多路复用器来让舞台和监听器的输入都被监听。

multiplexer = new InputMultiplexer();

然后添加两个监听器:

        multiplexer.addProcessor(this);
        multiplexer.addProcessor(stage);

现在您只需从此处删除该字段:

    @Override
    public boolean keyDown(int keycode) {
             Gdx.app.log("Debug:", "keydown : "+keycode);
            //DO SMOTHING LIKE
            // if(keycode==...) deleteTextField();
            return true;
}

如果您对此解决方案有任何疑问,请告诉我。对我来说效果很好。

于 2013-06-05T06:21:45.813 回答