J’ai utilisé certaines applications où, lorsque je remplis mon nom d’utilisateur, puis je passe à mon mot de passe, si j’appuie sur “Terminé” sur le clavier, le formulaire de connexion est automatiquement soumis, sans que je clique sur le bouton Soumettre. Comment ça se passe?
Essaye ça:
Dans votre mise en page mettez / éditez ceci:
Dans votre activité, mettez ceci (par exemple dans onCreate):
// your text box 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 onclick attaché.
Vous devez définir les options IME sur votre EditText
.
Ajoutez ensuite 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 do something handled = true; } return handled; } });
Doc officiel de l’API: https://developer.android.com/guide/topics/ui/controls/text.html#ActionEvent
Voilà comment c’est fait
editText.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if(actionId==EditorInfo.IME_ACTION_DONE){ //do something } return false; } });
N’oubliez pas d’append
actionDone dans votre EditText.
É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()
est quelque chose comme ça:
fun submit() { // call to api }
fun EditText.on(actionId: Int, func: () -> Unit) { setOnEditorActionListener { _, receivedActionId, _ -> if (actionId == receivedActionId) { func() } true } }
Et puis vous pouvez l’utiliser pour écouter votre événement:
email.on(EditorInfo.IME_ACTION_NEXT, { confirm() })
dans le fichier .java
EditText userNameField = (EditText) findViewById(R.id.signinscr_userName); EditText passwordField = (EditText) findViewById(R.id.signinscr_password); passwordField.setOnEditorActionListener(new OnEditorActionListener() { public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) { //Do your operation here. return false; } });
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) { // which is u had set a imeoption if (actionId == EditorInfo.IME_ACTION_DONE) { submit_btn.performClick(); return true; } return false; } });
Dans votre fichier XML à l’intérieur de votre tag edittext, ajoutez l’extrait ci-dessous
android:imeOptions="actionDone"
Ensuite, dans 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) { //do your work here return true; } return false; } });
append la ligne suivante dans edittext
android:imeOptions="actionDone"
Heureux codage