主要原理:在baseactivity中重写dispatchTouchEvent时间,拦截用户点击区域,获取当前焦点所在控件,如果该控件是edittextview并且,点击点在该控件区域外,就隐藏掉键盘,提升用户体验
@Override public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
View v = getCurrentFocus();
if (isShouldHideInput(v, ev)) {
InputMethodManager imm =
(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
return super.dispatchTouchEvent(ev);
}
if (getWindow().superDispatchTouchEvent(ev)) {
return true;
}
return onTouchEvent(ev);
}
public boolean isShouldHideInput(View view, MotionEvent event) {
if ((view instanceof EditText)) {
int[] leftTop = { 0, 0 };
view.getLocationInWindow(leftTop);
int left = leftTop[0];
int top = leftTop[1];
int bottom = top + view.getHeight();
int right = left + view.getWidth();
if (!(event.getX() > left && event.getX() < right && event.getY() > top
&& event.getY() < bottom)) {
return true;
}
}
return false;
}
本文介绍了如何在Android应用中实现全局点击非EditText区域时自动隐藏软键盘,通过在BaseActivity中重写dispatchTouchEvent方法,判断点击位置及当前焦点控件类型,提升用户交互体验。
4299

被折叠的 条评论
为什么被折叠?



