125 votes

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

J'utilise AlertDialog.Builder pour créer une boîte de saisie, avec EditText comme méthode de saisie.

Malheureusement, le clavier logiciel ne s'affiche pas, bien que le EditText soit en cours de mise au point, à moins que vous ne le touchiez explicitement à nouveau.

Y a-t-il un moyen de le forcer à éclater ?

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 ! !

230voto

grine4ka Points 642

J'ai fait une telle chose

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

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

dialog.show();

31voto

J'ai réussi à le résoudre comme ceci :

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);

24voto

Phuah Yee Keat Points 465

J'ai découvert que le même code fonctionne correctement sur la tablette, le clavier ne surgit, mais sur le téléphone, il ne, donc la recherche plus loin, semble pointer vers l'option "ajuster".

J'utilise ça, je me sens beaucoup plus propre.

AlertDialog d = builder.create();
d.getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
d.show();

14voto

vovahost Points 1123

Dans mon cas, la seule façon dont j'ai pu afficher le clavier lorsque la boîte de dialogue était affichée était en ajoutant à mon 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 :

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

7voto

user590912 Points 31

Lorsque vous appelez showDialog() pour afficher une boîte de dialogue créée en utilisant AlertDialog dans onCreateDialog()

Vous devriez mettre le code en onPrepareDialog() :

@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);
         }
       }
    });
}

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