多管齐下,点击EditText外区域隐藏软键盘
来源:互联网 发布:淘宝神笔模块怎么添加 编辑:程序博客网 时间:2024/04/30 10:15
需求:
当点击EditText控件之外的区域时,隐藏软键盘,EditText失去焦点(光标不闪);
解决方案:
1,隐藏软键盘,复写事件分发方法,判断点击点在哪里,如果不在EditText控件所在区域,隐藏;
/** * 复写事件分发,点击editext区域外部,隐藏键盘 * @param ev * @return */ @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { View v = getCurrentFocus(); if (isShouldHideKeyboard(v, ev)) { etSearch.clearFocus(); hideSoftKeybord(etSearch, RoomStatusActivity.this); } } return super.dispatchTouchEvent(ev); } /** * 根据点击区域判断是否应该隐藏键盘 * * @param v * @param event * @return */ private boolean isShouldHideKeyboard(View v, MotionEvent event) { if (v != null && (v instanceof EditText)) { int[] l = {0, 0}; v.getLocationInWindow(l); int left = l[0]; int top = l[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; } } // 如果焦点不是EditText则忽略,这个发生在视图刚绘制完,第一个焦点不在EditText上,和用户用轨迹球选择其他的焦点 return false; }
2,夺取焦点,如果只是让EditText单纯的失去焦点,即edittext.clearFocus(),很有可能是无效的,
但是clearFocus 真的无效吗?
当然不是,看似无效是因为,清除focus之后,还会按照先序遍历的顺序查找一个focusInTouchMode的View,并将其设置为focus,而你的EditText恰好是这第一个符合条件的View.(因此不是没清除成功,而是清除了之后,又给设置上了!!)
解决方案:在editext所在的父类布局中加上一句:
android:focusableInTouchMode="true"
大功告成,开心!
0 0
- 多管齐下,点击EditText外区域隐藏软键盘
- Android点击除edittext外其他区域或控件隐藏软键盘
- android 点击EditText外的区域关闭软键盘
- EditText 点击其它区域收起软键盘
- 点击Edittext之外的区域软键盘的显示和隐藏
- 点击EditText外的组件隐藏软键盘
- 点击 空白区域 隐藏 软键盘
- android 点击空白区域隐藏软键盘
- android点击空白区域隐藏软键盘
- 点击空白区域隐藏软键盘输入法
- 点击空白区域,隐藏软键盘
- 点击EditText隐藏软键盘代码
- Android基础控件——EditText隐藏软键盘、Enter键隐藏软键盘、点击非输入框区域隐藏软键盘
- EditText默认隐藏软键盘,点击后触发软键盘
- EditText 软键盘默认隐藏,点击外部隐藏
- Android EditText点击其他区域收起软键盘
- 软键盘切换以及隐藏(附--点击除EditText外键盘隐藏)
- 点击空白处隐藏软键盘(点击EditText以外的地方隐藏软键盘)
- 5.2 代码回滚:Reset、Checkout、Revert的选择
- SharedPreferences储存数据基本用法
- Linux 使用日常
- 康拓展开与逆康拓展开
- 最近的提高----厨艺
- 多管齐下,点击EditText外区域隐藏软键盘
- compile 'org.apache.mina:mina-transport-serial:2.0.16' 的引入问题
- STF -- 生成token
- 点击热力图
- 基于状态机State Machine的程序设计技巧①
- XCode Socket中文传输问题(乱码,可能是编码错误)
- 《JAVA与模式》之装饰模式
- 第十六周项目1-(4)验证算法快速排序
- Linux etc/soduers 用户添加到超级用户列表