Pour éviter que le focus ne passe au champ modifiable suivant (si vous en avez un), vous pouvez ignorer les événements de gestion des clés, mais gérer les événements de manipulation. Je préfère aussi filtrer d'abord sur le keyCode, en supposant qu'il serait légèrement plus efficace. Au fait, rappelez-vous que le fait de renvoyer vrai signifie que vous avez géré l'événement, donc aucun autre auditeur ne le fera. Quoi qu'il en soit, voici ma 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;
}
}
});
merci beaucoup, fonctionne très bien –
En fait, ce n'est pas garanti pour les gla clés. Par exemple, il ne fonctionne pas pour "ENTRER" sur Nexus 7 (Android 4.2) et pour "RETOUR" il le fait. – Ghedeon
MEILLEUR exemple vu! –