86 votes

Android TextField : définissez le focus + la saisie logicielle par programmation

À mon avis, j'ai une recherche EditText et j'aimerais déclencher par programmation le comportement d'un événement de clic sur le champ, c'est-à-dire donner le focus au champ de texte ET afficher le clavier logiciel si nécessaire (si aucun clavier dur n'est disponible).

J'ai essayé field.requestFocus() . Le champ obtient le focus mais le clavier logiciel n'est pas affiché.

J'ai essayé field.performClick() . Mais cela n'appelle que le OnClickListener du champ.

Une idée ?

154voto

pgsandstrom Points 5085

Bon monsieur, essayez ceci :

 edittext.setFocusableInTouchMode(true);
edittext.requestFocus();

Je ne suis pas sûr, mais cela peut être nécessaire sur certains téléphones (certains des appareils plus anciens) :

 final InputMethodManager inputMethodManager = (InputMethodManager) context
                .getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.showSoftInput(edittext, InputMethodManager.SHOW_IMPLICIT);

66voto

elisabel Points 141

Voici le code qui a fonctionné pour moi.

 edittext.post(new Runnable() {
    public void run() {
        edittext.requestFocusFromTouch();
        InputMethodManager lManager = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
        lManager.showSoftInput(edittext, 0);
    }
});

C'est ça! Prendre plaisir ;)

1voto

DependencyHell Points 336

Dans mon cas, je voulais afficher le clavier virtuel sans référence à une zone de texte spécifique, j'ai donc utilisé la première partie de la réponse acceptée pour me concentrer :

 edittext.setFocusableInTouchMode(true);
edittext.requestFocus();

Puis je montre le clavier virtuel :

 InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);

0voto

Intra Points 46
        field.post(new Runnable() {
            @Override
            public void run() {
                field.requestFocus();
                field.onKeyUp(KeyEvent.KEYCODE_DPAD_CENTER, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_CENTER));
            }
        });

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