点击空白处隐藏软键盘

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

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);
         }
     }
 }

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯Bugly的专栏

Android ImageView 正确使用姿势

导语 本文主要介绍了ImageView的相关重要方法,从源码角度剖析了一些容易令人混淆或百思不得其解的问题。 一、正确合理使用ImageView 的src 和b...

45280
来自专栏Android干货园

Android源码解析--SwipeMenuListView仿QQ聊天左滑

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/50...

16910
来自专栏Android知识点总结

5-VVI-材料设计之ToolBar

3.为测试colorAccent,activity_main.xml中加入EditText:

15440
来自专栏向治洪

可拖拽gridview

在Android开发中,我们常常用到ListView和GridView,而有的时候系统的ListView,GridView并不能满足我们的需求,所以我们需要自己...

34750
来自专栏Android-薛之涛

ViewFlipper-仿淘宝垂直广告滚动

viewflipper的子布局item_viewflipper.xml,下面是效果图,自己写,不会没招。

1.2K20
来自专栏Flutter入门到实战

Android仿简书长按文章生成图片效果

使用简书APP的同学都知道,简书有这样一个功能:文章页长按内容时底部会出现一个 生成图片分享 的按钮,点击之后就可以将当前的文章生成一张长图片,这张图片可以保存...

51720
来自专栏Android点滴积累

Android 7.0 PopupWindow 又引入新的问题,Google工程师也不够仔细么

Android7.0 PopupWindow的兼容问题 Android7.0 中对 PopupWindow 这个常用的控件又做了一些改动,修复了以前遗留的一些...

316100
来自专栏向治洪

RecyclerView详解

RecyclerView是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,但是直接把vi...

291100
来自专栏增长技术

Android 相机功能模块相关库

Android’s video recording APIs are very difficult to figure out, especially sinc...

24710
来自专栏androidBlog

自定义 Behavior - 仿新浪微博发现页的实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/de...

18020

扫码关注云+社区

领取腾讯云代金券