Sie haben wahrscheinlich bereits die Antwort auf dieses Problem gefunden, aber ich habe nach einer Lösung gesucht und kann immer noch nicht genau das finden, wonach ich gesucht habe. Deshalb dachte ich, ich würde es hier posten.
Was ich getan habe, war das Folgende (dies ist sehr verallgemeinert, der Zweck ist es, Ihnen eine Vorstellung davon zu geben, wie Sie vorgehen sollen. Das Kopieren und Einfügen des gesamten Codes funktioniert nicht O: D):
Lassen Sie zuerst den EditText und alle anderen Ansichten, die Sie in Ihrem Programm haben möchten, von einer einzelnen Ansicht umschließen. In meinem Fall habe ich ein LinearLayout verwendet, um alles zu verpacken.
<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>
Dann müssen Sie in Ihrem Code einen Touch Listener für Ihr Haupt-LinearLayout festlegen.
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;
}
});
Ich hoffe das hilft einigen Leuten. Oder hilft ihnen zumindest, ihr Problem zu lösen.