首先声明下,以下内容主要参考自http://www.2cto.com/kf/201505/401382.html
由于部分代码实际使用过程中有些问题,做了部分更改,主要在方法2:
1. 一般直接使用如下方式即可
@Override public boolean onTouchEvent(MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_DOWN && getCurrentFocus()!=null && getCurrentFocus().getWindowToken()!=null ){ InputMethodManager mInputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } return super.onTouchEvent(event); }
2. 如果第一种方法没效果,可以在activity中加入(上面的就不要了)
@Override public boolean dispatchTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN && getCurrentFocus()!=null && getCurrentFocus().getWindowToken()!=null) { View v = getCurrentFocus(); if (isShouldHideKeyboard(v, event)) { hideKeyboard(v.getWindowToken()); } } return super.dispatchTouchEvent(event); } /** * 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘,因为当用户点击EditText时则不能隐藏 */ private boolean isShouldHideKeyboard(View v, MotionEvent event) { if (v != null && (v instanceof EditText)) { int[] l = {0, 0}; v.getLocationOnScreen(l); int left = l[0], top = l[1], bottom = top + v.getHeight(), right = left + v.getWidth(); if (event.getRawX() > left && event.getRawX() < right && event.getRawY() > top && event.getRawY() < bottom) { // 点击EditText的事件,忽略它。 return false; } else { return true; } } // 如果焦点不是EditText则忽略,这个发生在视图刚绘制完,第一个焦点不在EditText上,和用户用轨迹球选择其他的焦点 return false; } /** * 获取InputMethodManager,隐藏软键盘 */ private void hideKeyboard(IBinder token) { if (token != null) { InputMethodManager mInputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS); } }
主要的改变在于
1)取点击event坐标的时候使用的是getRawX、getRawY,表示相对于屏幕的绝对坐标。
关于其他的方法见 http://blog.sina.com.cn/s/blog_5da93c8f0100tlol.html,但实际效果可能有差距,需自行测试。
2)获取EditText控件的坐标,使用了getLocationOnScreen,表示这个view左上角相对于屏幕的绝对坐标,getLocationInWindow 计算该视图在它所在的widnow的坐标x、y值,这个也自行测试吧...
相关推荐
点击空白处隐藏软键盘
点击空白区域隐藏软键盘,无需点击返回等。提高了用户体验以及操作习惯。
安卓实现点击空白区域隐藏软键盘和点击Editext以外的区域隐藏软键盘,内附txt格式的代码,可直接粘贴到到隐藏软键盘的Activity中运行
Android Studio点击空白处收起软键盘 //点击空白区域隐藏键盘 @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { View v = getCurrentFocus();...
项目中需要开发带有EditText的Dialog显示,要求在编辑完EditText时,点击Dilog的空白处隐藏软键盘。但是Dialog不会消失。示例如下: 二、实现方法: 发布需求时,我个人曾想过直接通过new的方式直接创建Dialog,...
1、//隐藏软键盘 在Java文件: InputMethodManager m = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE); m .hideSoftInputFromWindow(xxxx.getWindowToken()
主要介绍了Android编程实现点击EditText之外的控件隐藏软键盘功能,涉及Android控件的功能、属性及相关操作技巧,需要的朋友可以参考下
先上效果图如下,方格样式,以及点击空白处隐藏软键盘。 控件实现清单: 1)集成于EditText的输入框控件:PasswordInputView.java 2)数字键盘工具类:NumKeyboardUtil.java 3)xml文件:number.xml 4)attrs...