web-dev-qa-db-fra.com

Masquer le clavier logiciel après la fermeture du dialogue

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);
    }
});
36
Dmytro Zarezenko

Dans Manifest xml  

Android:windowSoftInputMode="stateAlwaysHidden"

Il masquera automatiquement le clavier virtuel lors du rejet de Dialog

76
Rajeshwar

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

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);
    }
}
6
Miika Pakarinen

J'utilise cette méthode:

IBinder token = searchTextEntry.getWindowToken();
( ( InputMethodManager ) getSystemService( Context.INPUT_METHOD_SERVICE ) ).hideSoftInputFromWindow( token, 0 );

searchTextEntry est le nom de ma référence EditText.

5
ScouseChris
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();
}
1
Yusuf Yaşar

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);
0
Karthik Sankar

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.

0
user3130847