点击空白处隐藏软键盘(点击EditText以外的地方隐藏软键盘)
2016-10-12 18:04
411 查看
点击空白处隐藏软键盘主要通过以下三步操作完成:
1.判断当前焦点是否在EditText上;
2.判断用户点击的区域是否在EditText之外;
3.若焦点在EditText上并且点击区域在EditText之外,则将软键盘隐藏。
了解到以上三点之后,接下来就是具体代码实现。首先,需要找个地方来实施以上三步操作,那么这个地方无疑是dispatchTouchEvent,通过重写dispatchTouchEvent方法来获取用户的触摸操作。
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
Logger.print(TAG, "dispatchTouchEvent");
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
Logger.print(TAG, "dispatchTouchEvent MotionEvent.ACTION_DOWN");
// 获得当前得到焦点的View
View v = getCurrentFocus();
//如果焦点在edittext上,则隐藏软键盘
if (JudgeHideFostInput.isShouldHideInput(v, ev)) {
JudgeHideFostInput.hideSoftInput(AppActivity.this,v.getWindowToken());
}
}
return super.dispatchTouchEvent(ev);
}
接下来,判断当前焦点是否是EditText及触摸区域。
public static boolean isShouldHideInput(View v, MotionEvent event) {
Logger.print("JudgeHideFostInput", "isShouldHideInput--------------->");
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.getRawY() > top && event.getRawY() < bottom ) {
// 点击EditText的事件,忽略它
return false;
} else {
return true;
}
}
return false;
}
最后,隐藏软键盘。
public static void hideSoftInput(Activity mActivity,IBinder token) {
Logger.print("JudgeHideFostInput", "hideSoftInput--------------->");
if (token != null) {
InputMethodManager im = (InputMethodManager) mActivity.getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(token,
InputMethodManager.HIDE_NOT_ALWAYS);
}
}
点击空白处隐藏软键盘这个功能我也是从网上借鉴而来,当时百度了很多方法,最后的最后就成了我现在用得这个。借鉴的那个大神的,哪部分借鉴的已经不记得了。现将我的思路和我的最终实现方式分享出来,希望对大家有所帮助。
1.判断当前焦点是否在EditText上;
2.判断用户点击的区域是否在EditText之外;
3.若焦点在EditText上并且点击区域在EditText之外,则将软键盘隐藏。
了解到以上三点之后,接下来就是具体代码实现。首先,需要找个地方来实施以上三步操作,那么这个地方无疑是dispatchTouchEvent,通过重写dispatchTouchEvent方法来获取用户的触摸操作。
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
Logger.print(TAG, "dispatchTouchEvent");
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
Logger.print(TAG, "dispatchTouchEvent MotionEvent.ACTION_DOWN");
// 获得当前得到焦点的View
View v = getCurrentFocus();
//如果焦点在edittext上,则隐藏软键盘
if (JudgeHideFostInput.isShouldHideInput(v, ev)) {
JudgeHideFostInput.hideSoftInput(AppActivity.this,v.getWindowToken());
}
}
return super.dispatchTouchEvent(ev);
}
接下来,判断当前焦点是否是EditText及触摸区域。
public static boolean isShouldHideInput(View v, MotionEvent event) {
Logger.print("JudgeHideFostInput", "isShouldHideInput--------------->");
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.getRawY() > top && event.getRawY() < bottom ) {
// 点击EditText的事件,忽略它
return false;
} else {
return true;
}
}
return false;
}
最后,隐藏软键盘。
public static void hideSoftInput(Activity mActivity,IBinder token) {
Logger.print("JudgeHideFostInput", "hideSoftInput--------------->");
if (token != null) {
InputMethodManager im = (InputMethodManager) mActivity.getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(token,
InputMethodManager.HIDE_NOT_ALWAYS);
}
}
点击空白处隐藏软键盘这个功能我也是从网上借鉴而来,当时百度了很多方法,最后的最后就成了我现在用得这个。借鉴的那个大神的,哪部分借鉴的已经不记得了。现将我的思路和我的最终实现方式分享出来,希望对大家有所帮助。
相关文章推荐
- 点击EditText以外的地方软键盘隐藏
- Android点击EditText之外的地方隐藏软键盘同时使EditText失去焦点
- 复杂布局中点击编辑框EditText以外界面无法隐藏软键盘的解决方法
- Android工作笔记_点击EditText以外的地方关闭软键盘的方法
- 点击EditText以外的地方隐藏掉键盘
- Android 通过点击EditText之外的地方隐藏软键盘
- 点击EditText以外的地方隐藏输入框和软键盘
- 点击edittext以外的地方关闭软键盘的方法
- Android点击EditText以外位置隐藏软键盘
- Android隐藏软键盘点击EditText之外的地方隐藏软键盘
- Android EditText设置默认不弹出软键盘,点击EditText外部隐藏软键盘,EditText获取焦点时隐藏hint
- EditText 软键盘默认隐藏,点击外部隐藏
- [置顶] android点击屏幕上EditText区域以外的任何地方隐藏键盘的方法
- 只要是点击editText以外部分就让软键盘收起来
- android制,点击EditText时刻,隐藏系统软键盘,显示光标
- 点击屏幕上EditText区域以外的任何地方隐藏键盘的解决方法
- 简单使用技巧 隐藏键盘, 判断软键盘是否打开. edittext解决第二次点击获取焦点
- Android在点击或触摸除过EditText之外的任何地方时隐藏软键盘
- 点击Edittext之外的区域软键盘的显示和隐藏
- Android点击EditText之外地方隐藏键盘