有没有办法在Activity.dispatchTouchEvent(MotionEvent ev)中获取对被触摸视图的引用?
如果用户点击不是EditText的任何地方,我需要隐藏自定义RelativeLayout“Keyboard”。因为我正在使用活动,并且许多片段都有许多视图组,并且每个组都拥有许多视图,其中一些是EditTexts,所以在每个子视图或子视图组上设置onTouchEvent都是太多的工作。
在MainActivity中,我认为这是一个很好的方法。
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (mKeyboardLike.getVisibility() == View.VISIBLE) {
if (!isTouchedEditText(ev.getRawX(), ev.getRawY())) {
mKeyboardLike.setVisibility(View.GONE);
}
}
return super.dispatchTouchEvent(ev);
}
private boolean isTouchedEditText(int x, int y){//viewFound instanceOf EditText; return true;}
答案 0 :(得分:0)
我认为这应该可以帮到你:
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
int x = Math.round(ev.getX());
int y = Math.round(ev.getY());
for (int i = 0; i < getChildCount(); i++) {
if (isEditText(x, y, getChildAt(i))) {
return true;
}
}
return true;
}
public boolean isEditText(int x, int y, View view) {
if (view instanceof ViewGroup) {
for (int i = 0; i < getChildCount(); i++) {
if (isEditText(x, y, ((ViewGroup) view).getChildAt(i))) {
return true;
}
}
} else if (view instanceof EditText) {
if (x > view.getLeft() && x < view.getRight() && y > view.getTop() && y < view.getBottom()) {
return true;
}
}
return false;
}