Comment intercepter des événements clés spécifiques à partir du clavier logiciel? spécifiquement, je suis intéressé par la touche "Terminé".
merci, Ori
Comment intercepter des événements clés spécifiques à partir du clavier logiciel? spécifiquement, je suis intéressé par la touche "Terminé".
merci, Ori
Je ne sais pas trop quel type d'auditeur a été utilisé dans la réponse acceptée. J'ai utilisé les OnKeyListener
attachés à un EditText
et il n'a pas été en mesure d'attraper le prochain, ni de le faire.
Cependant, utiliser OnEditorActionListener
fonctionnait et cela me permettait également de les différencier en comparant la valeur d'action à des constantes définies EditorInfo.IME_ACTION_NEXT
et EditorInfo.IME_ACTION_DONE
.
editText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId & EditorInfo.IME_MASK_ACTION) {
doSomething();
return true;
}
else {
return false;
}
}
});
@Swato la réponse n'était pas terminé pour moi (et ne compile pas!) donc, je vous montre comment faire la comparaison avec ce qui est FAIT et les PROCHAINES actions.
editText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView view, int actionId, KeyEvent event) {
int result = actionId & EditorInfo.IME_MASK_ACTION;
switch(result) {
case EditorInfo.IME_ACTION_DONE:
// done stuff
break;
case EditorInfo.IME_ACTION_NEXT:
// next stuff
break;
}
}
});
Aussi, je tiens à souligner que pour JellyBean et plus OnEditorActionListener est nécessaire pour écouter les 'enter' ou 'suivant' et vous ne pouvez pas utiliser OnKeyListener. À partir de la documentation:
Aussi douce méthodes de saisie peut utiliser plusieurs et inventive, des moyens de saisie de texte, il n'y a aucune garantie que tout à une touche sur un clavier logiciel va générer un événement clé: ceci est laissé à l'IME de la discrétion, et en fait de l'envoi de tels événements est découragé. Vous ne devez jamais compter sur la réception de KeyEvents pour une touche sur un soft de méthode d'entrée.
Référence: http://developer.android.com/reference/android/view/KeyEvent.html
Vous attrapez le KeyEvent puis vérifiez son code d'activation. FLAG_EDITOR_ACTION est utilisé pour identifier les clés d'entrée provenant d'un IME dont la clé d'entrée a été étiquetée automatiquement "next" ou "done".
if (event.getKeyCode() == KeyEvent.FLAG_EDITOR_ACTION)
//your code here
Trouvez les documents ici .
etSearchFriends = (EditText) findViewById(R.id.etSearchConn);
etSearchFriends.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// If the event is a key-down event on the "enter" button
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
Toast.makeText(ACTIVITY_NAME.this, etSearchFriends.getText(),Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
});
J'ai EditText que les recherches de noms, et il affiche automatiquement les résultats ci-dessous dans la liste. SoftInput clavier seulement montré le bouton "suivant" et entrez le signe - qui n'a rien fait. Je voulais seulement Faire bouton (pas de next ou enter signe) et aussi je voulais quand il était pressé, il doit fermer le clavier, car l'utilisateur doit voir les résultats ci-dessous il.
La Solution que j'ai trouvé /par M. Cyril Mottier sur son blog/ était très simple, et cela a fonctionné sans aucun code supplémentaire: en xml où EditText est situé, cela devrait être écrit: android:imeOptions="actionDone"
afin de se faufiler clavier avec bouton Terminé, EditText devrait ressembler à ceci:
<EditText
android:id="@+id/editText1central"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/imageView1"
android:layout_toLeftOf="@+id/imageView2tie"
android:ems="10"
android:imeOptions="actionDone"
android:hint="@string/trazi"
android:inputType="textPersonName" />
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.