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?
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);
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 =====================//
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);
}
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.
edittext.onEditorAction(EditorInfo.IME_ACTION_DONE);
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.
InputMethodManager inputManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(rootView.getWindowToken(), 0);