免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1640 | 回复: 1
打印 上一主题 下一主题

[Android] Android 点击空白处自动隐藏输入法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-01 10:08 |只看该作者 |倒序浏览
[Java]代码
  1. 方法1: 简单但有时会无效
  2. InputMethodManager manager= (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  
  3. @Override
  4. public boolean onTouchEvent(MotionEvent event) {   
  5. // TODO Auto-generated method stub   
  6. if(event.getAction() == MotionEvent.ACTION_DOWN){     
  7. if(getCurrentFocus()!=null && getCurrentFocus().getWindowToken()!=null){      
  8. manager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);     
  9. }   
  10. }   
  11. return super.onTouchEvent(event);  
  12. }

  13. 方法2: 完美适用activity与fragment

  14. // -------------------------------------隐藏输入法-----------------------------------------------------
  15.     // 获取点击事件
  16.     @Override
  17.     public boolean dispatchTouchEvent(MotionEvent ev) {
  18.         // TODO Auto-generated method stub
  19.         if (ev.getAction() == MotionEvent.ACTION_DOWN) {
  20.             View view = getCurrentFocus();
  21.             if (isHideInput(view, ev)) {
  22.                 HideSoftInput(view.getWindowToken());
  23.             }
  24.         }
  25.         return super.dispatchTouchEvent(ev);
  26.     }
  27.     // 判定是否需要隐藏
  28.     private boolean isHideInput(View v, MotionEvent ev) {
  29.         if (v != null && (v instanceof EditText)) {
  30.             int[] l = { 0, 0 };
  31.             v.getLocationInWindow(l);
  32.             int left = l[0], top = l[1], bottom = top + v.getHeight(), right = left
  33.                     + v.getWidth();
  34.             if (ev.getX() > left && ev.getX() < right && ev.getY() > top
  35.                     && ev.getY() < bottom) {
  36.                 return false;
  37.             } else {
  38.                 return true;
  39.             }
  40.         }
  41.         return false;
  42.     }
  43.     // 隐藏软键盘
  44.     private void HideSoftInput(IBinder token) {
  45.         if (token != null) {
  46.             InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
  47.             manager.hideSoftInputFromWindow(token,
  48.                     InputMethodManager.HIDE_NOT_ALWAYS);
  49.         }
  50.     }
复制代码

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
2 [报告]
发表于 2015-07-01 16:49 |只看该作者
其实这个应该是基本的需求了吧。不过还是学习一下代码。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP