今天更新了Studio3.0无意间发现onTouch的监听方法报警,给群里的小伙伴儿看,结果引来大神的指点,我在群里贴出的代码是点击Activity布局,隐藏输入法。大神却给了一个新的玩法,我们一起观赏一下吧。好东西要与志同道合的你们一起分享:
//处理触摸事件分发
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
//获取当前activity焦点
View view = getCurrentFocus();
if (isHideInput(view, ev)) {
HideSoftInput(view.getWindowToken());
}
}
return super.dispatchTouchEvent(ev);//事件向下分发
}
// 判定是否需要隐藏
private boolean isHideInput(View v, MotionEvent ev) {
if (v != null && (v instanceof EditText)) {
int[] I = {0, 0};
v.getLocationInWindow(I);//控件在其父窗口中的坐标位置
int left = I[0], top = I[1], bootom = top + v.getHeight(), right = left + v.getWidth();
//判断点击区域是否为有效区域,并返回true 或 false
if (ev.getX() > left && ev.getX() < right && ev.getY() > top && ev.getY() < bootom) {
return false;
} else {
return true;
}
}
return false;
}
// 隐藏软键盘
private void HideSoftInput(IBinder token) {
if (token != null) {
InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
manager.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);
}
}
以上就是猿友给的代码,仁者见仁智者见智,大家来评论一番,有什么需要改进的地方,请提出,合理的话,我再告知那位猿友,大家一起进步。