//点击空白处隐藏键盘和光标 *//** * 重写事件分发 * @param ev * @return *//* @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { View v = getCurrentFocus(); if (isShouldHideKeyboard(v, ev)) { v.clearFocus();//清除Edittext的焦点从而让光标消失 hideKeyboard(v.getWindowToken()); } } return super.dispatchTouchEvent(ev); } *//** * * 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘,因为当用户点击EditText时则不能隐藏 * * @param v * * @param event * * @return * *//* private boolean isShouldHideKeyboard(View v, MotionEvent event) { if (v != null && (v instanceof EditText)) { int[] l = {0, 0}; v.getLocationOnScreen(l); int left = l[0], top = l[1], bottom = top + v.getHeight(), right = left + v.getWidth(); if (event.getRawX() > left && event.getRawX() < right && event.getRawY() > top && event.getRawY() < bottom) {//点击EditText的时候不做隐藏处 return false; } else { return true; } }//如果焦点不是EditText则忽略,这个发生在视图刚绘制完,第一个焦点不在EditText上,和用户用轨迹球选择其他的焦点 return false; } *//** *获取InputMethodManager,隐藏软键盘 *@param token *//* private void hideKeyboard(IBinder token) { if (token != null) {//若token不为空则获取输入法管理器使其隐藏输入法键盘 InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS); } }
点击空白处隐藏键盘和光标
最新推荐文章于 2023-06-13 09:24:57 发布