Je souhaite masquer le clavier logiciel après le renvoi d'AlertDialog, mais il reste visible Voici mon code:
alert = new AlertDialog.Builder(MyActivity.this);
imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
alert.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
});
Dans Manifest xml
Android:windowSoftInputMode="stateAlwaysHidden"
Il masquera automatiquement le clavier virtuel lors du rejet de
Dialog
J'ai rencontré le même problème. Résolu en faisant comme ça. Il n'a pas besoin de référence:
imm.hideSoftInputFromWindow(getWindow().getDecorView()
.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
J'ai eu un problème similaire lors de la fermeture d'un dialogue d'alerte. Cela semble faire l'affaire pour moi.
Dans votre DialogFragment
public static void closeKB(final View view)
{
caller.postDelayed(new Runnable() {
@Override
public void run() {
InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
}, 1);
}
@Override
public void onDismiss(DialogInterface dialog)
{
super.onDismiss(dialog);
View view = getActivity().getCurrentFocus();
if (view != null)
{
closeKB(view);
}
}
J'utilise cette méthode:
IBinder token = searchTextEntry.getWindowToken();
( ( InputMethodManager ) getSystemService( Context.INPUT_METHOD_SERVICE ) ).hideSoftInputFromWindow( token, 0 );
Où searchTextEntry
est le nom de ma référence EditText
.
protected void hideKeyboard() {
final Activity activity = getActivity();
final View view = activity != null ? activity.getCurrentFocus() : null;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (view != null) {
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null)
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
}, 1);
}
@Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
hideKeyboard();
}
Cela marche! Cela fermera le clavier après la fermeture du dialogue
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
Tous ces conseils pour utiliser InputMethodManager
sont quelque peu vagues - où l'appeler exactement,
et ils ne travaillent pas au moins pour moi.
Oui, le clavier disparaît mais l'application se bloque !?
Le problème principal est que le masquage du clavier se produit en même temps que le dialogue disparaît.
Pour éviter cela, dialog.dismiss()
devrait être appelé dans view.postDelayed()
après imm.hideSoftInputFromWindow()
et, dans mon cas, je règle le délai à 150.