2012-11-27 2 views
14

Je dois masquer le clavier Android après un clic.Android: Masquer le clavier après le bouton, cliquez sur

J'ai vu beaucoup d'exemples de comment faire ceci, cependant, ils semblent tous utiliser un objet editText spécifique.

par exemple. Mon problème est que je construis l'écran de manière dynamique, donc il pourrait y avoir des champs de texte d'édition de créneaux. Est-il possible de cacher le clavier sans que je doive spécifier quel objet editText je le cache.

Merci

Martin

+0

Vous pouvez le cacher pour toute activité, ce résume bien: http://stackoverflow.com/questions/7789514/how-to-get-activitys-windowtoken-without-view –

Répondre

36

Vous pourriez plutôt mettre à votre disposition, à 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éé indépendamment du nombre EditText objets (ou d'autres objets) sont placés dessus.

Éditer: Aussi, quelque chose que je trouve très utile est de s'assurer que le clavier est caché quand une activité est lancée pour la première fois (ie: si un EditText est la première chose focalisée). Pour ce faire, je mets cela en méthode onCreate() d'activité:

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

Vous petite étoile vous. Fonctionne un régal. –

+1

merci burmat votre code aidez-moi beaucoup – Simmant

+0

Notez qu'il fonctionne également pour d'autres parties de la vue, par exemple. un EditText :) Ensuite, vous devez modifier la ligne suivante: 'imm.hideSoftInputFromWindow (myEditText.getWindowToken(), 0);' – Michael

20

Ne pas oublier d'utiliser le blog catch try parce que dans le cas où votre clavier ouvre pas et si vous utilisez l'application de code cacher clavier se bloque

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

de loin la solution la plus simple et élégante –

+0

@upvoted .. crash fixé .. thx –

6

Vous pouvez masquer le clavier en utilisant le code suivant, probablement sur le cLICK é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 =====================// 
2

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); 
} 
1

Si le problème est une activité simplement ce qui suit fonctionnera:

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

autre si le code est nécessaire 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 
    } 

Cela permet de gérer le masquage du clavier lors d'un clic sur un bouton ou de tout autre événement jugé spécifique lorsqu'il est écrit dans le bloc d'événements.

0
InputMethodManager inputManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
inputManager.hideSoftInputFromWindow(rootView.getWindowToken(), 0); 
0
edittext.onEditorAction(EditorInfo.IME_ACTION_DONE); 
Questions connexes