web-dev-qa-db-fra.com

Comment fermer Android Soft KeyBoard par programme?

Je montre actuellement le clavier logiciel en utilisant le code suivant

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput (InputMethodManager.SHOW_FORCED, InputMethodManager.RESULT_HIDDEN);

Et ici, je n'ai pas lié le clavier logiciel avec Edittext à cause de cela, j'avais utilisé le code ci-dessus.

Maintenant, je veux fermer le SoftKeyboard, donc j'utilise actuellement le code ci-dessous, mais cela ne fonctionne pas.

imm.toggleSoftInput (InputMethodManager.SHOW_FORCED, InputMethodManager.RESULT_HIDDEN);

Quelqu'un peut-il me suggérer quoi utiliser pour fermer le softKeyboard?


Basé sur la réponse ci-dessous, je tiens à vous préciser que je n'utilise pas EditText, j'utilise la mise en page sur laquelle je souhaite afficher Clavier et Masquer clavier. Je veux envoyer un événement de touche du clavier à la zone distante bcoz de celle pour laquelle je n’ai pas utilisé editText.

46
Mak

J'ai testé et cela fonctionne:

...
//to show soft keyboard
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);

//to hide it, call the method again
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);

En passant, le deuxième paramètre de votre code n’est pas correct, veuillez regarder ici .

90
user942821
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(EditTextName.getWindowToken(), 0);
39
Jana

Utilisez ce code de travail:

InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
31
Reddy Raaz

Si vous le souhaitez, vous pouvez utiliser la classe entière et appeler la méthode KeyboardUtil.hideKeyBoard (context) où:

public class KeyboardUtil
{
public static void hideKeyboard(Activity activity)
    {
        try
        {
            InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
            inputManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
         }
        catch (Exception e)
        {
            // Ignore exceptions if any
                Log.e("KeyBoardUtil", e.toString(), e);
        }
    }
}
9
Reddy Raaz

Fermer/cacher le clavier virtuel Android

View view = this.getCurrentFocus();
if (view != null) {  
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

it's working for me i hope it's work for you..

Ouvrez le clavier virtuel Android

 InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        if (inputMethodManager != null) {
            inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
        }
2
Ashutosh Srivastava

la réponse de user942821 pour cacher cela fonctionne:

imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);

Mais cela fonctionne aussi pour moi pour le cacher:

imm.toggleSoftInput(0, 0);

Vous voudrez peut-être aussi essayer:

imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);

Lorsque vous utilisez "0" dans le premier paramètre, le clavier bascule parfois au mauvais endroit dans des circonstances étranges que je n'ai pas encore su comprendre comment dupliquer. Je teste toujours ce dernier exemple, mais je le mettrai à jour lorsque j'en saurai plus.

Voir la page de documentation toggleSoftInput pour plus d’informations.

2
uowaep

Cela fonctionne bien

InputMethodManager keyboard = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
keyboard.hideSoftInputFromWindow(getWindow().getAttributes().token, 0);
2
Daniel Cherubini

Voici la solution qui vérifie si le clavier est visible 

    public static void hideKeyboard(Activity activity) {
        if (isKeyboardVisible(activity)) {
            InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
            imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
        }
    }

    public static boolean isKeyboardVisible(Activity activity) {
        ///This method is based on the one described at http://stackoverflow.com/questions/4745988/how-do-i-detect-if-software-keyboard-is-visible-on-Android-device
        Rect r = new Rect();
        View contentView = activity.findViewById(Android.R.id.content);
        contentView.getWindowVisibleDisplayFrame(r);
        int screenHeight = contentView.getRootView().getHeight();

        int keypadHeight = screenHeight - r.bottom;

        return
                (keypadHeight > screenHeight * 0.15);
    }
0
Boris Treukhov
InputMethodManager im =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
im.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
0
Priyanka

Tu pourrais aussi essayer

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
0
mseo

Pour cacher le clavier,

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mView.getWindowToken(), 0);

Ici, "mView" peut être n'importe quelle vue visible à l'écran

0
varotariya vajsi

Ce code masque le clavier dans onItemClick d'une AutoCompleteTextView

public void onItemClick(AdapterView<?> adapterViewIn, View viewIn, int indexSelected, long arg3) {
     // whatever your code does
     InputMethodManager imm = (InputMethodManager) getSystemService(viewIn.getContext().INPUT_METHOD_SERVICE);
     imm.hideSoftInputFromWindow(viewIn.getApplicationWindowToken(), 0);
}
0
tony gil