Para evitar que el enfoque avance al siguiente campo editable (si tiene uno) es posible que desee ignorar los eventos de desactivación, pero manejar eventos de activación. También prefiero filtrar primero en keyCode, suponiendo que sería marginalmente más eficiente. Por cierto, recuerda que regresar verdadero significa que has manejado el evento, por lo que ningún otro oyente lo hará. De todos modos, aquí está mi versión.
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;
}
}
});
Muchas gracias, funciona muy bien –
En realidad, no se garantiza el suave llaves. Por ejemplo, no funciona para "ENTER" en Nexus 7 (Android 4.2) y para "BACK" lo hace. – Ghedeon
MEJOR ejemplo que he visto! –