82 votes

Android : Le clavier logiciel exécute une action lorsque la touche Done est enfoncée.

J'ai un EditText. Je veux qu'après avoir tapé du texte, lorsque l'utilisateur appuie sur la touche Done du clavier logiciel, il devrait directement effectuer une opération de recherche que j'ai également implémentée dans un événement de clic de bouton.

1 votes

Meilleure façon de faire avec Kotlin dans ce commentaire : stackoverflow.com/a/48810268/1912924

213voto

Adil Soomro Points 18868

Essayez ceci

editText.setOnEditorActionListener(new OnEditorActionListener() {        
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if(actionId==EditorInfo.IME_ACTION_DONE){
            //do something
        }
    return false;
    }
});

20voto

Essayez ceci

Il fonctionne à la fois pour FAIT y RETURN .

EditText editText= (EditText) findViewById(R.id.editText);
editText.setOnEditorActionListener(new EditText.OnEditorActionListener() {

                @Override
                public boolean onEditorAction(TextView v, int actionId,
                        KeyEvent event) {
                    if (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER
                            || actionId == EditorInfo.IME_ACTION_DONE) {
                        // Do your action
                        return true;
                    }
                    return false;
                }
            });

0voto

Ariorick Points 11

En Kotlin, utilisez

viewBinding.editText.setOnEditorActionListener { view, actionId, event ->
    if (actionId == EditorInfo.IME_ACTION_DONE) {
        //react to action
    }
    false
}

Vous pouvez également renvoyer true à l'intérieur des accolades 'if' pour consommer l'événement - de cette façon, le clavier ne s'éteindra pas lorsque vous appuyez sur 'done'.

0voto

Nepster Points 893

Vous attrapez le KeyEvent puis vérifiez son code clé. FLAG_EDITOR_ACTION est utilisé pour identifier les touches d'entrée qui proviennent d'un EMI dont la touche d'entrée a été automatiquement étiquetée "suivant" ou "terminé".

if (event.getKeyCode() == KeyEvent.FLAG_EDITOR_ACTION)
    //your code here

Trouver les documents ici .

Deuxième méthode

myEditText.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;
    }
 }
});

0voto

Sunil Points 1487

Essayez ceci

Cela fonctionnera dans les deux cas, que votre clavier affiche le signe "Entrée" ou le signe "Flèche suivante".

YourEdittextName.setOnEditorActionListener(new TextView.OnEditorActionListener()
    {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
        {
            if(actionId== EditorInfo.IME_ACTION_DONE||actionId==EditorInfo.IME_ACTION_NEXT)
            {
                //Perform Action here 
            }
            return false;
        }
    });

Si vous êtes face à une ligne rouge, faites ceci... importez Keyevent et EditorInfo en appuyant sur alt+enter puis toutes les erreurs suppriment il sera correctement.......

Prograide.com

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.

Powered by:

X