web-dev-qa-db-fra.com

lors de l'utilisation d'AlertDialog.Builder avec EditText, le clavier ne s'affiche pas

J'utilise AlertDialog.Builder afin de créer une zone de saisie avec EditText comme méthode de saisie.

Malheureusement, le clavier ne s'ouvre pas, bien que le EditText soit actif, sauf si vous le touchez explicitement.

Y a-t-il un moyen de le forcer à apparaître?

J'ai essayé ce qui suit, après le (AlertDialog.Builder) .show (); mais en vain.

InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(input, InputMethodManager.SHOW_FORCED);

Quelqu'un peut aider?

Merci!!

106
niros

J'ai fait une chose pareille

AlertDialog.Builder b = new AlertDialog.Builder(this);//....
AlertDialog dialog = b.create();

dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);

dialog.show();
209
grine4ka

J'ai réussi à le résoudre comme ça:

Dialog = builder.create();
Dialog.show();
Dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE  | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
Dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
25

J'ai découvert que le même code fonctionnait correctement sur la tablette. Le clavier apparaît, mais pas sur le téléphone. Par conséquent, des recherches plus poussées semblent indiquer l'option "ajuster". 

Je l'utilise, me sens beaucoup plus propre.

AlertDialog d = builder.create();
d.getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
d.show();
19
Phuah Yee Keat

Lorsque vous appelez showDialog pour afficher un dialogue créé à l'aide d'AlertDialog dans onCreateDialog

Vous devriez mettre le code ici

    @Override
protected void onPrepareDialog (int id, Dialog dialog, Bundle args)
{
    TextView editText=(TextView) dialog.findViewById(R....);

    editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
       @Override
       public void onFocusChange(View v, boolean hasFocus) {
         if (hasFocus) {
            dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
         }
       }
    });

}
6
user590912

Dans mon cas, la seule façon pour moi de montrer le clavier lorsque le dialogue a été affiché a été d'ajouter à ma DialogFragment:

@Override
public void onResume() {
    super.onResume();
    getDialog().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
    getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
    myEditText.requestFocus();
}

Notez le SOFT_INPUT_STATE_ALWAYS_VISIBLE au lieu de SOFT_INPUT_STATE_VISIBLE.

De la documentation: 

int SOFT_INPUT_STATE_ALWAYS_VISIBLE
Visibility state for softInputMode: please always make the soft input area visible when this window receives input focus.
6
vovahost

Une solution bien meilleure est donnée ici .

dialog.getWindow().clearFlags(
         WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
        |WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);

Aucune solution de contournement. EditText se comporte comme prévu.

5
sulai
Window window = dialog.getWindow();
    window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
    window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
2
Mohammed Shoeb

Cela a été répondu ici déjà. Utiliser un OnFocusChangeListener a fonctionné pour moi.

1
dhaag23

Essayez ceci, ça marche pour moi

Si vous souhaitez afficher le clavier logiciel:

InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.showSoftInput(input.getWindowToken(), 0);

Et si vous voulez cacher le ça:

  InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(input.getWindowToken(), 0);
0
Yogesh Rathi
final AlertDialog.Builder alert = new AlertDialog.Builder(context);

final AlertDialog dialog = alert.show();
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
0
TonnyTao