您的位置:首页 > 移动开发 > Android开发

android点击空白地方隐藏软键盘

2017-01-04 12:04 190 查看
/**
* 设置输入法,如果当前页面输入法打开则关闭本篇文章用不到
*
* @param activity
*/
public void hideInputMethod(Activity activity) {
View a = activity.getCurrentFocus();
if (a != null) {
InputMethodManager imm = (InputMethodManager) activity.getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
try {
imm.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
} catch (Exception e) {
e.printStackTrace();
}
}
}
//从这里开始判断如果软键盘打开则
@Overridepublic 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);}}
参考链接:http://www.cnblogs.com/coding-way/archive/2012/07/04/2575769.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: