web-dev-qa-db-fra.com

Android: Masquer le clavier après un clic sur un bouton

Je dois masquer le clavier Android après un clic sur un bouton. 

J'ai vu de nombreux exemples sur la façon de procéder, mais ils semblent tous utiliser un objet editText spécifique. 

par exemple.

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

Mon problème est que je construis l'écran dynamiquement, donc il pourrait y avoir des champs de texte d'édition. Existe-t-il un moyen de masquer le clavier sans que je doive spécifier l'objet EditText pour lequel je le cache? 

20
Martin Shinks

Vous pouvez plutôt le définir sur votre mise en page, à savoir:

LinearLayout mainLayout;

// Get your layout set up, this is just an example
mainLayout = (LinearLayout)findViewById(R.id.myLinearLayout);

// Then just use the following:
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mainLayout.getWindowToken(), 0);

Ceci est un exemple en supposant que votre mise en page sera créée quel que soit le nombre d'objets EditText (ou autres objets) qui y sont placés.

Edit: Aussi, quelque chose que je trouve très utile est de s’assurer que le clavier est caché lors du premier lancement d’une activité (par exemple, si une EditText est la première chose à faire). Pour ce faire, je mets ceci dans la méthode d'activité onCreate():

 this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
44
burmat

Ne pas oublier d'utiliser try catch blog, car dans le cas où votre clavier ne s'ouvre pas et si vous utilisez la clé clavier masquer code app va planter  

try {
    InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
} catch (Exception e) {
    // TODO: handle exception
}

Vous pouvez masquer le clavier en utilisant le code suivant, probablement sur le Bouton clic événement:

//================ Hide Virtual Key Board When  Clicking==================//

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow("Your Button/EditText Object".getWindowToken(), InputMethodManager.RESULT_UNCHANGED_SHOWN);

//======== Hide Virtual Keyboard =====================//
8
IntelliJ Amiya

Vous utilisez ce code

// Check if no view has focus:
View view = this.getCurrentFocus();
if (view != null) {  
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
3
Pankaj Talaviya

Si le problème concerne une activité, voici ce qui fonctionne:

    try {
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
    } catch (Exception e) {
        // TODO: handle exception
    }

sinon, si le code est requis dans un fragment, procédez comme suit:

    try {
        InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), 0);
    } catch (Exception e) {
        // TODO: handle exception
    }

Ceci gérera le masquage du clavier lors d’un clic de bouton ou de tout autre événement considéré comme spécifique lorsqu’il est écrit dans le bloc d’événements.

2
Binayak Banerjee
edittext.onEditorAction(EditorInfo.IME_ACTION_DONE);
1
Makvin

Pour mémoire et basé sur les réponses de @burmat et @Prashant Maheshwari Andro

Disons que vous appelez le bouton de la souris comme suit. où buttonAndroidLogin_button est l'objet Button.

protected void onCreate(Bundle savedInstanceState) {
    // your code...
    buttonAndroidLogin_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            hideKeyboard((Button)v);
            // ....
} // end onCreate

Sur l'activité, vous devez définir la méthode suivante

public void hideKeyboard(View view) {
    try {
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    } catch(Exception ignored) {
    }
}

Il masque l'entrée en utilisant le même bouton , nous n'avons donc pas besoin de disposition linéaire, de vue texte ou de tout autre contrôle quelconque En outre, le code est réutilisable pour plusieurs boutons.

0
magallanes
InputMethodManager inputManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(rootView.getWindowToken(), 0);