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!!
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();
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);
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();
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);
}
}
});
}
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.
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.
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);
Cela a été répondu ici déjà. Utiliser un OnFocusChangeListener a fonctionné pour moi.
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);
final AlertDialog.Builder alert = new AlertDialog.Builder(context);
final AlertDialog dialog = alert.show();
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);