Si j'ai un EditText et que je veux écouter si l'utilisateur appuie sur le bouton "terminé" du clavier, comment dois-je faire ?
Cette réponse devrait être acceptée - c'est celle qui fonctionne sur le Samsung s4
Si j'ai un EditText et que je veux écouter si l'utilisateur appuie sur le bouton "terminé" du clavier, comment dois-je faire ?
La réponse de Dinash est bien, mais elle ne fonctionne pas sur tous les appareils. Le code ci-dessous fonctionne bien sur tous les appareils
edittext.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
Toast.makeText(HelloFormStuff.this, edittext.getText(), Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
});
Le code est
final EditText edittext = (EditText) findViewById(R.id.edittext);
edittext.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER) {
Toast.makeText(HelloFormStuff.this, edittext.getText(), Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
});
Dans ce cas, 'edittext' est l'identifiant du champ de texte.
Consultez ce lien Il suffit de définir setOnKeyListener à votre editText
Salut Dinash. Le fait de poster un lien n'est généralement pas utile. Il est préférable de fournir un exemple de code qui répond à la question de l'auteur de la demande, puis d'établir un lien vers l'article source à titre de référence ou pour une lecture plus approfondie.
Bonjour Chris, je pensais que vous pouviez trouver la réponse à partir de ce lien lui-même, mais j'ai quand même donné un code exact disponible dans le lien lui-même... Le code est final EditText edittext = (EditText) findViewById(R.id.edittext) ; edittext.setOnKeyListener(new OnKeyListener() {public boolean onKey(View v, int keyCode, KeyEvent event event) {if ((event.getAction() == KeyEvent. ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) { Toast.makeText(HelloFormStuff.this, edittext.getText(), Toast.LENGTH_SHORT).show() ; return true;}return false;}}) ; J'espère que cela vous sera utile... Dans ce cas, 'edittext' est l'identifiant du champ de texte.
Il ne fonctionnera pas sur les claviers personnalisés. setOnKeyListener ne sera pas appelé sur certains claviers personnalisés.
La méthode de base pour gérer l'action effectuée en Kotlin est la suivante :
edittext.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
// Call onDone result here
true
}
false
}
Utilisez-le pour appeler edittext.onDone {/*action*/}
dans votre code principal. Cela le rend plus lisible et plus facile à maintenir.
edittext.onDone { submitForm() }
fun EditText.onDone(callback: () -> Unit) {
// These lines optional if you don't want to set in Xml
imeOptions = EditorInfo.IME_ACTION_DONE
maxLines = 1
setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
callback.invoke()
true
}
false
}
}
N'oubliez pas d'ajouter ces options à votre Xml d'edittext, si ce n'est pas dans le code
<EditText ...
android:imeOptions="actionDone"
android:inputType="text"/>
Si vous avez besoin
inputType="textMultiLine"
soutien, lire cet article
Juste une remarque pour tout le monde, Android:imeOptions="actionDone" ne fonctionne pas uniformément sur tous les appareils, je l'ai explicitement évité autant que possible car les appareils plus anciens avec des écouteurs de touches qui fonctionnent commencent à les ignorer lorsque cette option est active. Je trouve aussi qu'il peut vous mettre dans des endroits bizarres, il a aussi récupéré la touche de retour arrière sur le Samsung S20.
Sur la base de la réponse d'Asad Rao, j'ai créé cette fonction d'extension KOTLIN.
fun TextView.onClickKeyboardDoneButton(funExecute: () -> Unit) {
this.setOnEditorActionListener { _, actionId, _ ->
when (actionId) {
EditorInfo.IME_ACTION_DONE -> {
funExecute.invoke()
true
}
else -> false
}
}
}
Utilisez :
myEditText.onClickKeyboardDoneButton{myFunctionToExecuteWhenUserClickDone()}
Le site même Jone réponse, mais avec des lambdas remplacés :
etPointCombatFirst.setOnEditorActionListener((v, actionId, event) -> {
if (actionId == EditorInfo.IME_ACTION_DONE) {
Toast.makeText(HelloFormStuff.this, edittext.getText(), Toast.LENGTH_SHORT).show();
return true;
}
return false;
});
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.
1 votes
Un point à prendre en compte : le téléphone peut avoir un clavier physique, et l'utilisateur peut ne jamais appuyer sur le bouton "Terminer" du clavier. Avez-vous pensé à effectuer votre opération en fonction de la perte du focus ou de la fin de l'édition d'un texte ?
0 votes
Duplicata possible : stackoverflow.com/a/60989441/878126