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

Android点击屏幕空白处,隐藏键盘

2016-06-27 17:36 471 查看
做项目的时候,很多界面都有EditText控件或者自定义的输入框控件,内容输入完成之后,希望点击屏幕任意空白处,能把键盘隐藏起来。网上找了些资料,实现了这个功能。参考:完美解决点击空白处,隐藏软键盘

自己稍微处理了一下,代码分为两块,一个写在Activity里(或者父类Activity),另一个封装到UtilHelpers帮助类里面,直接调用。代码如下:

UtilHelpers.java:

/**
* 根据传入控件的坐标和用户的焦点坐标,判断是否隐藏键盘,如果点击的位置在控件内,则不隐藏键盘
*
* @param view
*            控件view
* @param event
*            焦点位置
* @return 是否隐藏
*/
public static void hideKeyboard(MotionEvent event, View view,
Activity activity) {
try {
if (view != null && view instanceof EditText
|| view instanceof VoiceEditText
|| view instanceof VoiceDescriptionEditText) {
int[] location = { 0, 0 };
view.getLocationInWindow(location);
int left = location[0], top = location[1], right = left
+ view.getWidth(), bootom = top + view.getHeight();
// 判断焦点位置坐标是否在空间内,如果位置在控件外,则隐藏键盘
if (event.getRawX() < left || event.getRawX() > right
|| event.getY() < top || event.getRawY() > bootom) {
// 隐藏键盘
IBinder token = view.getWindowToken();
InputMethodManager inputMethodManager = (InputMethodManager) activity
.getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(token,
InputMethodManager.HIDE_NOT_ALWAYS);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}

这里需要传入三个参数:MotionEvent、View、Activity ,MoTionEvent是用户的点击焦点,View是需要比较坐标位置的控件,Activity其实就是一个Context,用来获取SystemService。

BaseActivity.java:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
View view = getCurrentFocus();
UtilHelpers.hideKeyboard(ev, view, BaseActivity.this);//调用方法判断是否需要隐藏键盘
break;

default:
break;
}
return super.dispatchTouchEvent(ev);
}
这是写在父类Activity里的dispatchTouchEvent方法。
代码不多,注释较详细,就不细说了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  界面 Android EditText