我无法在我的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上进行了测试。
答案 0 :(得分:2)
从TextField.java source看起来像“DELETE”(和“BACKSPACE”,“TAB”和其他几个键)由TextField专门处理。这些密钥永远不会转发给任何监听器。
内置处理程序应该做“正确的事情”(修剪字符串内容中的字符)。
对于您的情况,删除行为是否导致您尝试对其进行解码?
答案 1 :(得分:0)
DELETE按钮应该以不同的方式实现。
我建议尝试验证按下的键是否为DELETE按钮。如果是,您只需执行textField.getText()
,修剪最后一个字母,然后使用setText
设置新文字。
我确信有更优雅的方式来做到这一点,但这是我能想到的唯一解决方法。毕竟,DELETE实际上不是一个可以放在setText
内的字符。是吗? :/
后期编辑:
在监听器中打印key
变量,在其中放置一个断点,并查看为其分配的值。
然后还打印(或检查javadoc)KeyEvent.KEYCODE_DEL
(documentation 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