J'ai utilisé certaines applications où lorsque je saisis mon nom d'utilisateur, puis passe à mon mot de passe, si je touche "Terminé" sur le clavier, le formulaire de connexion est automatiquement soumis, sans que je n'aie à cliquer sur le bouton de soumission. Comment est-ce fait ?
Réponses
Trop de publicités?Essayez ceci :
Dans votre mise en page, mettez/modifiez ceci :
Dans votre activité, mettez ceci (par exemple dans onCreate) :
// votre champ de texte
EditText edit_txt = (EditText) findViewById(R.id.search_edit);
edit_txt.setOnEditorActionListener(new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
submit_btn.performClick();
return true;
}
return false;
}
});
Où submit_btn
est votre bouton de soumission avec votre gestionnaire d'événements onclick attaché.
Solution simple et efficace avec Kotlin
Étendre EditText
:
fun EditText.onSubmit(func: () -> Unit) {
setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
func()
}
true
}
}
Ensuite, utilisez la nouvelle méthode comme ceci:
editText.onSubmit { submit() }
Où submit()
ressemble à ceci:
fun submit() {
// appel à l'api
}
Extension plus générique
fun EditText.on(actionId: Int, func: () -> Unit) {
setOnEditorActionListener { _, receivedActionId, _ ->
if (actionId == receivedActionId) {
func()
}
true
}
}
Et ensuite, vous pouvez l'utiliser pour écouter votre événement:
email.on(EditorInfo.IME_ACTION_NEXT, { confirm() })
Vous devez définir les options IME sur votre EditText
.
Ensuite, ajoutez un OnEditorActionListener
à la vue pour écouter l'action "done".
EditText editText = (EditText) findViewById(R.id.some_view);
editText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
boolean handled = false;
if (actionId == EditorInfo.IME_ACTION_DONE) {
// TODO faire quelque chose
handled = true;
}
return handled;
}
});
Documentation officielle de l'API : https://developer.android.com/guide/topics/ui/controls/text.html#ActionEvent
C'est ainsi que cela se fait
editText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if(actionId == EditorInfo.IME_ACTION_DONE){
//faire quelque chose
}
return false;
}
});
N'oubliez pas d'ajouter ce qui suit
actionDone dans votre EditText.
Dans votre fichier XML à l'intérieur de votre balise edittext ajoutez le snippet ci-dessous
android:imeOptions="actionDone"
Ensuite, à l'intérieur de votre classe Java, écrivez le code ci-dessous
editText.setOnEditorActionListener(new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int id, KeyEvent event) {
if (id == EditorInfo.IME_ACTION_DONE) {
//faites quelque chose ici
return true;
}
return false;
}
});
- Réponses précédentes
- Plus de réponses