530 votes

Comment montrer souple-clavier lorsque edittext est focalisé

Je veux afficher automatiquement le doux-clavier lorsqu'un EditText est ciblée (si l'appareil ne dispose pas d'un clavier physique) et j'ai deux problèmes:

  1. Quand mon Activity s'affiche, mon EditText est concentré mais le clavier ne s'affiche pas, j'ai besoin de cliquer à nouveau sur pour afficher le clavier (il doit être affiché lorsque mon Activity est affiché).

  2. Et quand je clique sur terminé sur le clavier, le clavier est décrit, mais l' EditText reste concentré et y ne voulez pas (parce que mon montage est fait).

Pour la reprendre, mon problème est d'avoir quelque chose de plus, comme sur l'iPhone: en conservant la synchronisation du clavier avec mes EditText état (porté / non ciblée) et bien sûr ne présente pas de soft-clavier si il y a une physique.

734voto

raukodraug Points 3280

Vous pouvez utiliser pour forcer le clavier logiciel apparaisse,

Et pour enlever le focus sur , hélas, tu dois avoir un mannequin d’attraper la mise au point.

J’espère que cette aide


Pour le fermer, vous pouvez utiliser

262voto

Mike Keskinov Points 2890

J'ai eu le même problème. Immédiatement après l'editText VISIBILITÉ changement de PARTI VISIBLE, j'ai dû mettre l'accent et d'afficher le clavier virtuel. J'ai réalisé cela, utilisez le code suivant:

        (new Handler()).postDelayed(new Runnable() {

            public void run() {
//              ((EditText) findViewById(R.id.et_find)).requestFocus();
//              
                EditText yourEditText= (EditText) findViewById(R.id.et_find);
//              InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
//              imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT);

                yourEditText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
                yourEditText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));                       

            }
        }, 200);

Il fonctionne pour moi avec le délai de 100ms, mais il a omis, sans retard, ou avec un retard de 1ms.

Commentée de la partie de code montre une autre approche, qui ne fonctionne que sur certains appareils. Je l'ai testé sur les versions de système d'exploitation 2.2 (émulateur), 2.2.1 (périphérique réel) et 1.6 (émulateur).

Cette approche m'a sauvé beaucoup de douleur.

168voto

David Chandler Points 853

Pour que le clavier à comparaître, utilisez

Cette méthode est plus fiable que d’appeler le InputMethodManager directement.

Pour le fermer, utilisez

77voto

Robin Davies Points 2088

Le code suivant est pillé depuis le code source 4.1 de Google pour SearchView. Semble bien fonctionner sur des versions d’Android aussi bien moindre.

Puis par ailleurs, le code suivant doit être ajouté que l’activité ou le contrôle est créée. (Dans mon cas c’est un contrôle composite, plutôt qu’une activité).

36voto

gorenikhil33 Points 141

``-> dans le fichier manifeste.

``-> dans le code.

Ceci ouvrira le clavier logiciel sur lequel edit-texte a le focus de la demande tel qu’il appert de l’activité.

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