libGDX scene2d TextFieldListener在Android上没有收到DELETE键

时间:2013-01-20 22:30:45

标签: java android textfield libgdx

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

    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 个答案:

答案 0 :(得分:2)

TextField.java source看起来像“DELETE”(和“BACKSPACE”,“TAB”和其他几个键)由TextField专门处理。这些密钥永远不会转发给任何监听器。

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

对于您的情况,删除行为是否导致您尝试对其进行解码?

答案 1 :(得分:0)

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

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

我确信有更优雅的方式来做到这一点,但这是我能想到的唯一解决方法。毕竟,DELETE实际上不是一个可以放在setText内的字符。是吗? :/

后期编辑:

在监听器中打印key变量,在其中放置一个断点,并查看为其分配的值。

然后还打印(或检查javadoc)KeyEvent.KEYCODE_DELdocumentation here)以查看此值的值。

答案 2 :(得分: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;
}

如果您对此解决方案有疑问,请与我们联系。 为我工作很棒。

答案 3 :(得分:0)

此问题已由最新的每日版libgdx解决,该问题已知并在以下链接中进行了讨论: nexus button