2017-12-05 11 views
1

in Android Ich kann leicht die ENTER-Zeichen mit der Methode SetOnEditorActionListener erkennen, so dass, wenn ein Barcode in ein Textfeld gescannt wird ich weiß, wenn der gesamte Barcode gelesen wurde.Codename One - Scannen von Barcodes auf neue Zeile/ENTER Zeichen

[Hier ist der Android-Code wie gewünscht:]

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

Ich habe versucht, diese in Codenamen zu replizieren, aber ohne Glück. Ich habe versucht,

  • setDoneListener
  • addDataChangedListener
  • Action auf dem Textfeld und Textbereich
  • die keyPressed zwingenden und keyReleased Methoden

aber ohne Freude. Wenn ich ein TextField mit setSingleLineTextArea (false) setze, sehe ich die Barcode-Zeichen in dem Feld, gefolgt von dem, was ich annehme, ist ein neues Zeilenzeichen, da der nächste Scan in einer neuen Zeile erscheint. Keine der aufgelisteten Methoden scheint dieses Ereignis zu erfassen. Wenn ich den Fokus auf eine andere Box ändere, wird das ActionEvent ausgelöst, aber ich möchte nicht jedes Mal den Fokus verschieben müssen.

[Hier ist der Codenameone Code]

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()); 
}); 

Also, wie fange ich das Ende des Barcodes wie ich kann einfach im Android SDK?

+0

einige Ihres Codes stellen hier – diegoveloper

Antwort

1

Texteingabe ist für uns in allen Betriebssystemen ein Sonderfall, daher gehen die Schlüssel direkt in die native OS-Textbearbeitung und "reisen" nicht durch Codename One APIs. Allerdings sollte DataChangeListener für jede Tasteneingabe aufgerufen werden, so dass ich nicht sicher bin, wie dies genau passiert.

Ich habe festgestellt, dass Sie System.out anstelle von Log.p verwenden, so dass Sie die Ausgabe von dem Gerät im Zusammenhang mit den Änderungen verpassen könnten. Außerdem würde ich empfehlen, die gedrückten/freigegebenen Tasten zu überschreiben und die Textbearbeitung nicht zu starten. Dann Hinzufügen der Schlüsselwert in das Textfeld, anstatt dass die native Eingabe handhaben es z.B .:

class MyForm extends Form { 
    public void keyReleased(int key) { 
     if(isCrLf(key)) { 
      // do this... 
     } else { 
      myTextField.setText(myTextField.getText() + ((char)key)); 
     } 
    } 
} 
+0

Vielen Dank für Ihre schnelle Antwort. Kann man als Alternative zum Scannen von Barcodes bei Verwendung der Kamerafunktion ein anderes Scannermodul verwenden? Ich habe mit der cn1-codescan.cn1lib experimentiert, die ich benutze ZXIng. Ist es möglich, ein anderes Scanner-Modul wie Scandit zu verwenden? – NvServices

+0

Wir haben keine integrierte Unterstützung für scannit, aber nick integrierte Unterstützung für zbar auf Android in seinem QR-Scanner, der auch im Extension Manager verfügbar ist, und Sie können seine Quelle überprüfen. Beachten Sie, dass wir unter iOS bereits zbar verwenden und zxing unter iOS problematisch ist. Die Integration eines QR-Scanners sollte ziemlich einfach sein, da unsere beiden Bibliotheken online verfügbar sind und Sie sie als Ausgangspunkt für Ihre eigene Arbeit verwenden können –