Aby uniknąć przechodzenia do następnego edytowalnego pola (jeśli je posiadasz), możesz zignorować zdarzenia blokowania, ale zajmij się zdarzeniami kluczowania. Ja także wolę filtrować najpierw na keyCode, zakładając, że byłby nieznacznie bardziej wydajny. Przy okazji pamiętaj, że powrót do prawdziwej oznacza, że masz do czynienia z wydarzeniem, więc żaden inny słuchacz nie będzie. Tak czy inaczej, oto moja wersja.
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;
}
}
});
Wielkie dzięki, działa świetnie –
Właściwie, to nie jest gwarantowane przez miękki klawiatura. Na przykład nie działa dla "ENTER" na Nexusie 7 (Android 4.2), a dla "BACK" tak. – Ghedeon
NAJLEPSZY przykład, jaki widziałem! –