Android点击EditText之外的地方隐藏键盘
16lz
2021-01-25
有些时候我们添加一个点击EditText以外的地方隐藏键盘的功能,通过查找资料,亲测可以采用以下的方法,在activity中重写dispatchTouchEvent(MotionEvent ev)的方法:
@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { View v = getCurrentFocus(); //当isShouldHideInput(v, ev)为true时,表示的是点击输入框区域,则需要显示键盘, //同时显示光标,反之,需要隐藏键盘、光标 if (isShouldHideInput(v, ev)) { //处理Editext的光标隐藏、显示逻辑 KeyBoardUtils.closeKeybord((EditText) v, this); } return super.dispatchTouchEvent(ev); } // 必不可少,否则所有的组件都不会有TouchEvent了 if (getWindow().superDispatchTouchEvent(ev)) { return true; } return onTouchEvent(ev);}
/** * 判断点击的区域是否EditText之外 * * @param v * @param event * * @return 返回true说明点击的是输入框区域外 */ public boolean isShouldHideInput(View v, MotionEvent event) { if (v != null && (v instanceof EditText)) { int[] leftTop = {0, 0}; //获取输入框当前的location位置 v.getLocationInWindow(leftTop); int left = leftTop[0]; int top = leftTop[1]; int bottom = top + v.getHeight(); int right = left + v.getWidth(); if (event.getX() > left && event.getX() < right && event.getY() > top && event.getY() < bottom) { // 点击的是输入框区域,保留点击EditText的事件 return false; } else { return true; } } return false; }
/** * 关闭软键盘的方法(写在 KeyBoardUtils 的工具类里面) * * @param mEditText 输入框 * @param mContext 上下文 */ public static void closeKeybord(EditText mEditText, Context mContext) { if (mEditText != null && mContext != null) { InputMethodManager imm = (InputMethodManager) mContext .getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0); } }
更多相关文章
- Android(安卓)Studio中设置ButterKnife、android butterknife ze
- Android(安卓)记键盘弹起的几个方法
- Android画图之Bitmap
- Android(安卓)ActionBar以及menu的代码设置样式
- android ADB (1) 键盘之adb keycode值
- Android软键盘确认键执行两次
- [置顶] Android开发之将Edittext输入弹出的软键盘设置搜索确定键
- android EditText获取光标位置并安插字符删除字符
- 让Android程序自动打开软键盘