Codename One - 扫描条形码检查新的行/ ENTER字符

时间:2017-12-05 12:28:08

标签: android codenameone barcode

Android中的

我可以使用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中复制这个但没有运气。我试过了

  • setDoneListener
  • addDataChangedListener
  • 文本字段和文本区域上的ActionEvent
  • 覆盖keyPressed和keyReleased方法

但没有快乐。如果我用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中轻松捕获条形码的结尾?

1 个答案:

答案 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));
        }
    }
}