简单处理点击EditText外部区域关闭软键盘
简单了解事件的触发机制
在Android中,View的结构是树状的,所以,当触发触摸事件的时候,其事件传递也是从上之下一层层的传递。下面我们结合例子来一点点进行分析。
首先,我们需要了解事件处理中的几个方法:
1、在ViewGroup中,事件分为dispatchTouchEvent(事件的分发),onInterceptTouchEvent(事件的拦截),onTouchEvent(事件的处理)。
2、在View中,事件分为dispatchTouchEvent(事件的分发),onTouchEvent(事件的处理)。
关闭软键盘思路
1、监听整个页面的事件分发(即ViewGroup中的dispatchTouchEvent)
2、用getCurrentFocus()方法获取当前焦点所在的view,以及在其父窗口中的坐标位置
3、根据EditText所在坐标和用户点击的坐标相对比,判断是否点击的区域在EditText的区域范围内
效果图
相关代码
事件分发
@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {if (ev.getAction() == MotionEvent.ACTION_DOWN) {View v = getCurrentFocus();if (isShouldHideKeyboard(v, ev)) {hideKeyboard(CloseSoftKeyBoard.this,Objects.requireNonNull(v).getWindowToken());}}return super.dispatchTouchEvent(ev);}
判断点击的区域是否需要关闭软键盘
/*** 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘,因为当用户点击EditText时则不能隐藏*/public static boolean isShouldHideKeyboard(View v, MotionEvent event) {if (v != null && (v instanceof EditText)) {int[] l = {0, 0};v.getLocationInWindow(l);//得到输入框在屏幕中上下左右的位置int left = l[0], top = l[1], bottom = top + v.getHeight(), 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;}
关闭软键盘
/*** 获取InputMethodManager,隐藏软键盘*/public static void hideKeyboard(Activity activity, IBinder token) {if (token != null) {InputMethodManager im = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);Objects.requireNonNull(im).hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);}}
简单处理点击EditText外部区域关闭软键盘相关推荐
- android点击软键盘外面的区域关闭软键盘解决办法
很多时候在一个页面有多个输入框或者输入框加选择框的时候,我们需要根据用户的点击去关闭软键盘. 在Activity中加入以下代码即可 /**重写dispatchTouchEvent* 点击软键盘外面的区 ...
- Android 点击EditText外部区域失去焦点的方法
可能大家都遇到多个输入框,当某个输入框有焦点时,光标显示.当我们点击输入框以外的地方.使输入框焦点消失,隐藏键 盘. //使editText点击外部时候失去焦点@Overridepublic boo ...
- 点击空白区域关闭软键盘
很多时候,需求需要点击输入框其他地方,关闭软键盘,下面分享一个utils public class HideKeyBroadUtils {private HideKeyBroadUtils(){}/* ...
- DialogFragment常见问题(黑色棱角、点击编辑框外关闭软键盘..)
1.设置对话框外部的背景为完全透明: 在onStart()方法中加入以下代码: @Overridepublic void onStart() {super.onStart();/*** 将对话框外部( ...
- 打开关闭软键盘,点击屏幕其他地方关闭软键盘
打开关闭软键盘,点击屏幕其他地方关闭软键 关闭然键盘: public void closeKeyboard() {View rootView = getWindow().getDecorView(); ...
- android edittext失去焦点,Android 点击EditText外部区域失去焦点的方法
可能大家都遇到多个输入框,当某个输入框有焦点时,光标显示.当我们点击输入框以外的地方.使输入框焦点消失,隐藏键 盘. //使editText点击外部时候失去焦点 @Override public b ...
- 点击EditText外部区域失去焦点的方法
复制到Activity即可 @Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {if (ev.getAction() == Moti ...
- Android 当EditextText失去焦点,或者点击Activity的时候关闭软键盘或者其他布局
当我们点击EditText的时候会默认弹出系统的软键盘,当点击其他控件的时候,默认是不会关闭其他系统键盘的,或者自己定义的类似popwindow类似效果的时候 点击其他地方的时候,自己定义的布局会自动 ...
- android 关闭软键盘,点击软键盘之外关闭软键盘,editText关闭键盘
/*** @description 关闭界面软键盘方法 复制直接调closeKeyBoard()用即可实现关闭软键盘*/ private InputMethodManager mImm; public ...
- android 点击关闭软键盘
在项目中,editText获取焦点后,会自动弹出软键盘,关闭的时候一般需要按返回键或者点击软键盘上的按钮, 即使当前activity已经finish掉,软键盘依然存在,会影响用户的体验. 网上目前有很 ...
最新文章
- Java源码详解零:HashMap介绍
- Red Hat Enterprise Linux 5.4安装GCC
- LIBSVM使用方法
- SpringCloud(二) 生产者、消费者工程搭建与调用(下)
- 实验楼python挑战答案_python基础知识
- linux轻量级的图形库,基于Microwindows的嵌入式Linux轻量级图形应用库的设计
- Python基础知识之二
- 验票证明怎么打印_发票真伪查询打印系统软件
- 【ZMap】unable to initialize blacklist / whitelist
- 【uni-app踩坑记录】uni-starter本地微信一键授权登录失败
- node 后台重定向_Node.js如何实现重定向
- Linux mail 命令(smtp.163.com)
- 异常(Exception)
- 28个在线游戏编程学习网站
- 解决: Error Code: 2013. Lost connection to MySQL server during query
- 线性规划求解——增广拉格朗日函数法
- 门控时钟电路(Intergrated clock gating)
- Day08-整合富文本编辑器-p115
- 如何用java POI在excel中画线_java poi对excel的操作详解
- linux忘记root密码的解决办法