Voici ce que j'ai fait pour mon application, et il fonctionne comme, attendez, parfait!
D'abord voici le code qui cache simplement le clavier:
public static void hideSoftKeyboard(Activity activity) {
InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
}
Vous pouvez mettre cela en place dans une classe utilitaire, ou si vous sont à définir au sein d'une activité, d'éviter l'activité paramètre, ou appelez - hideSoftKeyboard(this)
.
La partie la plus délicate est de savoir quand appeler. Vous pouvez écrire une méthode qui parcourt chaque View
de votre activité, et de vérifier si c'est un instanceof EditText
si elle n'est pas enregistrer un setOnTouchListener
de cette composante et tout va tomber en place. Dans le cas où vous vous demandez comment faire, il est en fait assez simple. Voici ce que vous faites, vous écrivez une méthode récursive comme suit, en fait, vous pouvez l'utiliser pour faire quelque chose, comme le programme d'installation de polices de caractères personnalisées etc... Voici la méthode
public void setupUI(View view) {
//Set up touch listener for non-text box views to hide keyboard.
if(!(view instanceof EditText)) {
view.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
hideSoftKeyboard(MyActivity.this);
return false;
}
});
}
//If a layout container, iterate over children and seed recursion.
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
View innerView = ((ViewGroup) view).getChildAt(i);
setupUI(innerView);
}
}
}
C'est tout, il suffit d'appeler cette méthode après l' setContentView
dans votre activité. Dans le cas où vous vous demandez qu'est-ce paramètre vous voulez passer, c'est l' id
du conteneur parent. Attribuer un id
de votre conteneur parent comme
<RelativeLayoutPanel android:id="@+id/parent"> ... </RelativeLayout>
et appelez - setupUI(findViewById(R.id.parent))
, c'est tout.
Si vous souhaitez utiliser efficacement, vous pouvez créer un Activity
et de mettre cette méthode en, et de prendre toutes les autres activités dans votre application d'étendre cette activité et appeler ses setupUI()
dans la onCreate()
méthode.
Espérons que cela aide.
Si vous utilisez plus de 1 activité-définir l'id du parent de mise en page comme
<RelativeLayout android:id="@+id/main_parent"> ... </RelativeLayout>
Puis étendre une classe à partir d' Activity
et de définir setupUI(findViewById(R.id.main_parent))
à l'Intérieur de ses OnResume()
et d'étendre cette classe à la place de l'Activité `in your program