Probablemente ya haya encontrado la respuesta a este problema, pero he estado buscando cómo resolverlo y todavía no puedo encontrar exactamente lo que estaba buscando, así que pensé que lo publicaría aquí.
Lo que hice fue lo siguiente (esto es muy generalizado, el propósito es darte una idea de cómo proceder, copiar y pegar todo el código no funcionará O: D):
Primero tenga EditText y cualquier otra vista que desee en su programa envuelta en una sola vista. En mi caso, usé LinearLayout para envolver todo.
<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>
Luego, en su código, debe configurar un Touch Listener en su 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;
}
});
Espero que esto ayude a algunas personas. O al menos les ayuda a empezar a resolver su problema.