Um zu vermeiden, dass der Fokus auf das nächste editierbare Feld (falls vorhanden) gesetzt wird, möchten Sie möglicherweise die Key-down-Ereignisse ignorieren, aber Key-up-Ereignisse behandeln. Ich bevorzuge auch, zuerst auf dem keyCode zu filtern, vorausgesetzt, dass es marginal effizienter wäre. Denken Sie übrigens daran, dass die Rückgabe von true bedeutet, dass Sie das Ereignis behandelt haben, also kein anderer Zuhörer. Wie auch immer, hier ist meine Version.
ETFind.setOnKeyListener(new OnKeyListener()
{
public boolean onKey(View v, int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER
|| keyCode == KeyEvent.KEYCODE_ENTER) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
// do nothing yet
} else if (event.getAction() == KeyEvent.ACTION_UP) {
findForward();
} // is there any other option here?...
// Regardless of what we did above,
// we do not want to propagate the Enter key up
// since it was our task to handle it.
return true;
} else {
// it is not an Enter key - let others handle the event
return false;
}
}
});
dank viel, funktioniert super –
Eigentlich ist es nicht für Weich garantiert Schlüssel. Zum Beispiel funktioniert es nicht für "ENTER" auf Nexus 7 (Android 4.2) und für "BACK" tut es. – Ghedeon
BEST Beispiel ive gesehen! –