12
votes

Masquer le clavier dans AlertDialog

J'ai un alertdialog avec un éditxt. Pour ce clavier EditText, je fais un clavier et je souhaite que lorsque l'utilisateur appuyait sur OK ou sur Annuler pour masquer le clavier. Le problème étrange est que lorsque l'utilisateur choisit OK, le clavier est masqué, mais lorsque vous choisissez Annuler, le clavier ne masque pas une utilisation du même code pour les deux cas.

Voici mon code: P>

final AlertDialog.Builder alert = new AlertDialog.Builder(this);

        alert.setTitle(data);
        final EditText input = new EditText(this);
        InputFilter[] FilterArray = new InputFilter[1];
        FilterArray[0] = new InputFilter.LengthFilter(25);
        input.setFilters(FilterArray);
        input.postDelayed(new Runnable() {
            @Override
            public void run() {
                InputMethodManager keyboard = (InputMethodManager)
                getSystemService(Context.INPUT_METHOD_SERVICE);
                keyboard.showSoftInput(input, 0); 
            }
        },200);



        alert.setView(input);

        alert.setPositiveButton(ok, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                text = input.getText().toString().trim();
                Canvas c = new Canvas(bitmapResult);
                drawTextImage(bitmapResult);
                saveimage();
                InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(input.getWindowToken(), 0);
            }
        });

        alert.setNegativeButton(cancel,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        dialog.cancel();
                        saveimage();
                        InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                        im.hideSoftInputFromWindow(input.getWindowToken(), 0);
                    }
                });

        alert.show();


2 commentaires

Je cherche partout pour le code qui obligerait le clavier à afficher dans la boîte de dialogue pour un EditText. Qui savait que vous deviez le retarder pour quelques millisecondes en premier. Merci!


Belle solution pour afficher le clavier :) J'en avais un qui n'a pas fonctionné pour les versions inférieures à Android, mais le vôtre est génial. Le retard peut même être ressentir comme une animation;)


6 Réponses :


30
votes

J'ai trouvé la solution: xxx

J'aurais dû mettre dialog.cancel () après que je cache le clavier.

Mise à jour à Kotlin: < / strong> xxx


1 commentaires

Était en difficulté depuis une heure. C'est la seule solution qui a fonctionné dans mon cas. Merci



0
votes

Pas sûr, mais vous pouvez essayer d'ajouter ceci: xxx

Je l'utilise pour éviter le premier affichage du clavier lorsque mon application commence ... quand je clique dans le Champ, le clavier est toujours ouvert ...

Donc, peut-être, cela pourrait fonctionner avec votre code: xxx

puis ferme automatiquement .. .


0 commentaires

10
votes

Moi aussi, je me débattais avec ça et je me suis lancé dans ma tête sur n'importe quelle "solution" qui a été publiée pourtant le foutu clavier ne ferait toujours pas de fermeture. Ensuite, j'ai eu une vision caffue: xxx

notez le Hide_Implicit_only

espoir qui aide toute autre personne à lutter avec ce problème.


2 commentaires

Wow, j'étais sceptique que cela fonctionnerait, comme vous, toutes les autres solutions qui ne fonctionnaient donc pas pour moi, mais cela a réellement travaillé! +1


1+ Pour une option sans avoir besoin de la référence d'EditText



0
votes

Utilisez la méthode suivante avant d'utiliser dialog.cancel (); xxx


0 commentaires

1
votes

Dans mon cas, je voulais que le clavier soit ouvert uniquement lorsque la boîte de dialogue affichée J'ai essayé de nombreuses solutions, mais j'ai finalement réussi à réaliser en ajoutant

 android:windowSoftInputMode="stateAlwaysHidden"


0 commentaires

0
votes

J'ai essayé tout ce qui précède mais enfin cela fonctionne pour moi ... après quelques cheveux perdus -_- xxx


0 commentaires