我可以使用setOnEditorActionListener方法轻松检测到ENTER字符,这样当条形码扫描到文本字段时,我知道整个条形码何时被读取。
[以下是所请求的Android代码:]
scanEditText.setOnEditorActionListener(new TextView.OnEditorActionListener()
{
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
{
if ( (actionId == EditorInfo.IME_ACTION_DONE) || ((event.getKeyCode() == KeyEvent.KEYCODE_ENTER) && (event.getAction() == KeyEvent.ACTION_DOWN )))
{
System.out.println(" *** ENTER!");
return true;
}
else
return false;
}
});
我一直试图在Codename One中复制这个但没有运气。我试过了
但没有快乐。如果我用setSingleLineTextArea(false)设置textField,我可以看到条形码字符出现在框中,接着是我假设的是 下一次扫描的新行字符出现在新行上。列出的所有方法似乎都没有捕获此事件。如果我将焦点更改为另一个框,则会触发ActionEvent,但我不想每次都移动焦点。
[这是Codenameone代码]
gui_searchTextField.setSingleLineTextArea(false);
gui_searchTextField.setDoneListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
Dialog.show("KB", "doneListener " +
gui_searchTextField.getText().trim(), "OK", null);
}
});
gui_searchTextField.addDataChangedListener((evt1, evt2) ->
{
System.out.println("DataChanged " + gui_searchTextField.getText());
});
那么,如何在Android SDK中轻松捕获条形码的结尾?
答案 0 :(得分:1)
在所有操作系统中,文本输入对我们来说都是一个特例,因此密钥直接进入本机操作系统文本编辑,而不是“旅行”#34;通过Codename One API' s。但是,应为每个键输入调用DataChangeListener
,因此我不确定这是如何发生的。
我确实注意到您使用的是System.out
而不是Log.p
,因此您可能会错过与更改相关的设备输出。此外,我建议覆盖按下/释放的键事件,而不是开始文本编辑。然后将键值添加到文本字段,而不是让原生输入处理它,例如:
class MyForm extends Form {
public void keyReleased(int key) {
if(isCrLf(key)) {
// do this...
} else {
myTextField.setText(myTextField.getText() + ((char)key));
}
}
}