輸入法引起的顯示問題
Background:今天在開發(fā)時遇到了一個小問題桶蛔,點(diǎn)擊EditText彈出的輸入法,在我點(diǎn)擊其他控件時沒有消失荐绝,影響了其他控件的顯示漫拭。
solution: 重寫Activity的dispatchTouchEvent方法,攔截Touch事件下翎,判斷是否點(diǎn)擊控件是否為EditText缤言。如果不是,那么就隱藏輸入法视事。
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
// 攔截ACTION_DOWN事件胆萧,判斷是否需要隱藏輸入法
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
View view = getCurrentFocus();
if (isShouldHideInput(view, ev)) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
return super.dispatchTouchEvent(ev);
}
// 交由DecorView去做Touch事件的分發(fā)
if (getWindow().superDispatchTouchEvent(ev)) {
return true;
}
// Activity內(nèi)沒有View對這個Touch事件做處理,那么有Activity來處理
return onTouchEvent(ev);
}
private boolean isShouldHideInput(View view, MotionEvent ev) {
\\ 1俐东、判斷是否是EditText跌穗,如果不是,直接返回false
if (view != null && (view instanceof EditText)) {
int[] location = {0, 0};
view.getLocationOnScreen(location);
int left = location[0];
int top = location[1];
\\ 2虏辫、判斷Touch的點(diǎn)是否在EditText外
if (ev.getX() < left || (ev.getX() > left + view.getWidth())
|| ev.getY() < top || (ev.getY() > top + view.getHeight())) {
return true;
} else {
return false;
}
}
return false;
}
reference: https://blog.csdn.net/h649305597/article/details/53519320
知識點(diǎn):Touch事件的分發(fā)處理
https://blog.csdn.net/carson_ho/article/details/54136311