이 문제에 대한 답을 이미 찾았을 수도 있지만이 문제를 해결하는 방법을 찾고 있었지만 여전히 내가 찾고있는 것을 정확히 찾을 수 없으므로 여기에 게시 할 것이라고 생각했습니다.
내가 한 일은 다음과 같습니다 (이것은 매우 일반화되어 있으며 모든 코드를 복사하고 붙여 넣는 방법에 대한 아이디어를 제공하는 것이 O : D 작동하지 않습니다) :
먼저 EditText 및 프로그램에서 원하는 다른 뷰를 단일 뷰로 래핑하십시오. 제 경우에는 LinearLayout을 사용하여 모든 것을 래핑했습니다.
<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>
그런 다음 코드에서 터치 리스너를 기본 LinearLayout으로 설정해야합니다.
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;
}
});
나는 이것이 어떤 사람들에게 도움이되기를 바랍니다. 또는 적어도 문제 해결을 시작하도록 도와줍니다.