在Activity中:
@Override public boolean dispatchTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: View view = getCurrentFocus(); Utils.hideKeyboard(ev, view, XiuGaiDZActivity.this);//调用方法判断是否需要隐藏键盘 break; default: break; } return super.dispatchTouchEvent(ev); }
在utils工具类中:
public static void hideKeyboard(MotionEvent event, View view, Activity activity) { try { if (view != null && view instanceof EditText) { int[] location = {0, 0}; view.getLocationInWindow(location); int left = location[0], top = location[1], right = left + view.getWidth(), bootom = top + view.getHeight(); // 判断焦点位置坐标是否在空间内,如果位置在控件外,则隐藏键盘 if (event.getRawX() < left || event.getRawX() > right || event.getY() < top || event.getRawY() > bootom) { // 隐藏键盘 IBinder token = view.getWindowToken(); InputMethodManager inputMethodManager = (InputMethodManager) activity .getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS); } } } catch (Exception e) { e.printStackTrace(); } }
结束 记录一下