前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >点击空白处隐藏软键盘

点击空白处隐藏软键盘

作者头像
夏洛克的猫
发布2018-10-18 14:13:05
1.5K0
发布2018-10-18 14:13:05
举报
文章被收录于专栏:移动开发移动开发

在点击Editext的时候安卓会弹出软键盘,在我们输入完后不点击软键盘的”完成”键的时候,软键盘有时候会一直停留在”界面”,甚至跳转到另一个”界面”上.这样体验上不是很好.所以点击非EditText区域上,让软键盘隐藏起来是一种可行的方案. 从别人的博客上看到的代码,摘录如下:

代码语言:javascript
复制
public class HomeActivity extends Activity {
     ......
     @Override
     public boolean dispatchTouchEvent(MotionEvent ev) {
         if (ev.getAction() == MotionEvent.ACTION_DOWN) {

             // 获得当前得到焦点的View,一般情况下就是EditText(特殊情况就是轨迹球或者实体案件会移动焦点)
             View v = getCurrentFocus();

             if (isShouldHideInput(v, ev)) {
                 hideSoftInput(v.getWindowToken());
             }
         }
         return super.dispatchTouchEvent(ev);
     }

     /**
      * 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘,因为当用户点击EditText时没必要隐藏
      * 
      * @param v
      * @param event
      * @return
      */
     private boolean isShouldHideInput(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内,在就让软键盘弹起
                 // 点击EditText的事件,忽略它。
                 return false;
             } else {
                 return true;
             }
         }
         return false;
     }

     /**
      * 隐藏软键盘
      * 
      * @param token
      */
     private void hideSoftInput(IBinder token) {
         if (token != null) {
             InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHODERVICE);
             im.hideSoftInputFromWindow(token,
                     InputMethodManager.HIDE_NOT_ALWAYS);
         }
     }
 }

原理主要是利用事件分发机制,在其他事件响应前做一些处理

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年03月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档