在做登陆或者注册的时候,软键盘经常可能会挡住一些界面。我们需要在输入完成之后隐藏软键盘。

在我们点击空白处或者非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的事件,忽略它。
return false;
} else {
return true;
}
}
// 如果焦点不是EditText则忽略,这个发生在视图刚绘制完,第一个焦点不在EditView上,和用户用轨迹球选择其他的焦点
return false;
} /**
* 多种隐藏软件盘方法的其中一种
*
* @param token
*/
private void hideSoftInput(IBinder token) {
if (token != null) {
InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(token,
InputMethodManager.HIDE_NOT_ALWAYS);
}
}
......
}

  

在isShouldHideInput中不应该使用event.getX()函数,而是应该用event.getRawX()函数

public final float getRawX ()
Added in API level 1
Returns the original raw X coordinate of this event. For touch events on the screen, this is the original location of the event on the screen, before it had been adjusted for the containing window and views.

  

这个是相对于屏幕左上角的点

public final float getX ()
Added in API level 1
getX(int) for the first pointer index (may be an arbitrary pointer identifier).
这个是触摸点相对于该widget的坐标
InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);

  

最新文章

  1. poj 2503(字符串)
  2. selenium移动div里面的滚动条,操作弹出对话框
  3. 后端码农谈前端(CSS篇)第六课:盒子模型
  4. java多线程系类:基础篇:04synchronized关键字
  5. 转载:监控每个节点(jvm部分)
  6. 实体框架 (EF) 入门 =&gt; 三、CodeFirst 支持的完整特性列表
  7. Koa2 源码解析(1)
  8. 在orangepi-PC下使用pyopengl
  9. php 之 post json 数据
  10. ajax 请求数据
  11. Echarts数据可视化dataZoom,开发全解+完美注释
  12. css 块元素、内联元素、内联块元素
  13. spring MVC页面的重定向
  14. WPFのBorder的用法
  15. tensorflow scope的作用
  16. Python网络爬虫相关基础概念
  17. jqGrid遍历所有行及获取某一行数据
  18. oauth入门
  19. Hibernate的应用与注解开发
  20. linux下centos7中mysql崩溃问题的解决

热门文章

  1. .NET Core 调用WCF 服务
  2. Oracle 数据泵导入导出
  3. ASP.NET MVC 网站开发总结(三) ——图片截图上传
  4. 在吉日嘎拉DotNet.WebForm中使用FluentScheduler调度任务
  5. 孙鑫MFC学习笔记12:文件读写
  6. Java---Java的面试题(一)
  7. XE8 (RTM) Android SDK 更新安装
  8. Elasticsearch5.0.1索引压测结果
  9. mysql定时任务简单例子
  10. lodash常用方法1--查询