博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何解决EditText使用时,点击外侧系统键盘不消失的bug
阅读量:6840 次
发布时间:2019-06-26

本文共 2158 字,大约阅读时间需要 7 分钟。

在使用viewPager和EditText一起使用的时候,突然出现了一个bug,在点击EditText(此EditText是在ViewPager的Fragment中)

我在切换ViewPager的时候,如果你先点击了EditText系统键盘此时出现了,切换的时候系统键盘会在另一个Pager的页面继续存在

这样就非常难受了,而且点击空白或者系统键盘外侧系统键盘竟然不消失!

查了下需要在Activity中重写一些方法,重写dispatchTouchEvent拦截点击,判断是不是在点击系统的键盘区域,如果是就不让系统键盘消失,如果不是就让系统键盘消失

/**     * 通过dispatchTouchEvent每次ACTION_DOWN事件中动态判断非EditText本身区域的点击事件,然后在事件中进行屏蔽系统键盘。     * @param ev     * @return     */    @Override    public boolean dispatchTouchEvent(MotionEvent ev) {        if (ev.getAction() == MotionEvent.ACTION_DOWN) {                  View v = getCurrentFocus();                  if (isShouldHideInput(v, ev)) {                        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);                            if (imm != null) {                                   imm.hideSoftInputFromWindow(v.getWindowToken(), 0);                               }                        }                    return super.dispatchTouchEvent(ev);                }            // 必不可少,否则所有的组件都不会有TouchEvent了            if (getWindow().superDispatchTouchEvent(ev)) {                    return true;                }            return onTouchEvent(ev);        }    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;        }

i forget where i found this code,but always thanks the author,even though he can,t see this  

转载于:https://www.cnblogs.com/fengfenghuifei/p/5999970.html

你可能感兴趣的文章
windows server 2008的安装以及主机IP配置实验
查看>>
自己搭建自动化巡检系统(五) 抖动告警
查看>>
我们该使用哪种分布式锁?
查看>>
Java Web 前端高性能优化(二)
查看>>
44.作用域,局部和全局变量
查看>>
find、sed、awk、grep命令总结
查看>>
winpcap
查看>>
shell脚本编写乘法口诀
查看>>
mysql 最大链接数 max_connections 设置
查看>>
【源资讯 第37期】一个时代的终结 —— 再见, Flash !
查看>>
阶段性总结(一)
查看>>
调试小技巧---利用调用堆栈
查看>>
mariadb安装和使用
查看>>
Nginx基础
查看>>
网络, Nginx
查看>>
渐进式框架
查看>>
区块链教程Fabric1.0源代码分析Peer peer channel命令及子命令实现
查看>>
经典的网络安全技术
查看>>
学习Kali Linux必须知道的几点
查看>>
数字断路器获得商用认证
查看>>