Vous avez probablement déjà trouvé la réponse à ce problème, mais j'ai cherché comment le résoudre et je ne peux toujours pas vraiment trouver exactement ce que je cherchais, alors j'ai pensé que je le publierais ici.
Ce que j'ai fait était ce qui suit (c'est très général, le but est de vous donner une idée de la façon de procéder, copier et coller tout le code ne fonctionnera pas O: D):
Tout d'abord, le EditText et toutes les autres vues que vous souhaitez dans votre programme sont enveloppés par une seule vue. Dans mon cas, j'ai utilisé un LinearLayout pour tout envelopper.
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainLinearLayout">
<EditText
android:id="@+id/editText"/>
<ImageView
android:id="@+id/imageView"/>
<TextView
android:id="@+id/textView"/>
</LinearLayout>
Ensuite, dans votre code, vous devez définir un écouteur tactile sur votre LinearLayout principal.
final EditText searchEditText = (EditText) findViewById(R.id.editText);
mainLinearLayout.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
if(searchEditText.isFocused()){
if(event.getY() >= 72){
//Will only enter this if the EditText already has focus
//And if a touch event happens outside of the EditText
//Which in my case is at the top of my layout
//and 72 pixels long
searchEditText.clearFocus();
InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
Toast.makeText(getBaseContext(), "Clicked", Toast.LENGTH_SHORT).show();
return false;
}
});
J'espère que cela aidera certaines personnes. Ou du moins les aide à commencer à résoudre leur problème.