Android(安卓)点击EditText外部区域失去焦点的方法
16lz
2021-01-26
可能大家都遇到多个输入框,当某个输入框有焦点时,光标显示。当我们点击输入框以外的地方。使输入框焦点消失,隐藏键 盘。
//使editText点击外部时候失去焦点 @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { View v = getCurrentFocus(); if (isShouldHideInput(v, ev)) {//点击editText控件外部 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); if (imm != null) { assert v != null; KeyBoardUtil.closeKeyboard(v);//软键盘工具类 if (editText != null) { editText.clearFocus(); } } } return super.dispatchTouchEvent(ev); } // 必不可少,否则所有的组件都不会有TouchEvent了 return getWindow().superDispatchTouchEvent(ev) || onTouchEvent(ev); } EditText editText = null; public boolean isShouldHideInput(View v, MotionEvent event) { if (v != null && (v instanceof EditText)) { editText = (EditText) v; 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(); return !(event.getX() > left && event.getX() < right && event.getY() > top && event.getY() < bottom); } return false; }
下为KeyBoardUtil类:
/** * 关闭软键盘 * * @param view */ public static void closeKeyboard(View view) { InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); }
把以上方法写在你的BaseActivity里就好啦~
喜欢(❤ ω ❤)的小伙伴可以点个赞~ 谢谢
更多相关文章
- 第六章 Android常见的UI基础控件(二)
- Android底部导航栏之BottomNavigationBar
- android 开发者选项
- android UI设计的一些心得与问题解决(无效果图)
- android 同一个界面多个跑马灯实现
- android showSoftInput方法调用软键盘不显示
- Android(安卓)启动界面 点击按钮跳转和3秒跳转
- TextView自定义跑马灯效果
- EditText 笔记