Bạn có thể đã tìm thấy câu trả lời cho vấn đề này nhưng tôi đang tìm cách giải quyết vấn đề này và vẫn không thể thực sự tìm thấy chính xác những gì tôi đang tìm kiếm vì vậy tôi nghĩ rằng tôi sẽ đăng nó ở đây.
Những gì tôi đã làm là như sau (điều này rất tổng quát, mục đích là để cung cấp cho bạn ý tưởng về cách tiếp tục, sao chép và dán tất cả mã sẽ không hoạt động O: D):
Trước tiên hãy có EditText và bất kỳ dạng xem nào khác mà bạn muốn trong chương trình của mình được bao bọc bởi một dạng xem duy nhất. Trong trường hợp của tôi, tôi đã sử dụng LinearLayout để gói mọi thứ.
<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>
Sau đó, trong mã của bạn, bạn phải đặt Trình nghe cảm ứng thành LinearLayout chính của bạn.
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;
}
});
Tôi hy vọng điều này sẽ giúp một số người. Hoặc ít nhất là giúp họ bắt đầu giải quyết vấn đề của họ.