首先声明下,以下内容主要参考自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值,这个也自行测试吧...
相关推荐
综上所述,通过简单的几行代码,我们就可以实现点击屏幕空白处隐藏软键盘的功能。这对于提升应用的交互体验具有重要意义。此外,还可以结合其他场景(如编辑框失去焦点等)进一步优化软键盘的管理逻辑。
在Android开发中,用户界面的...通过以上步骤,我们就实现了在Android应用中,点击EditText以外的地方或屏幕空白区域自动隐藏软键盘的功能。这种方法可以提升用户体验,使得在有限的屏幕空间中更容易进行多任务操作。
Android Studio点击空白处收起软键盘 //点击空白区域隐藏键盘 @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { View v = getCurrentFocus();...
标题"点击空白区域隐藏软键盘"所描述的技术解决方案就是针对这一需求而设计的。这种功能使得用户在不需要点击返回键或者特定关闭键盘的按钮时,只需点击屏幕空白区域,就能自动收起软键盘,从而提升用户体验和操作...
这段代码会在用户点击屏幕非EditText区域时隐藏软键盘,同时允许用户在EditText内进行正常输入。 总的来说,通过监听触摸事件并结合`InputMethodManager`服务,开发者可以在Android应用中实现用户友好的交互,使得...
Android 编程实现点击EditText之外的控件隐藏软键盘功能 Android 编程实现点击EditText之外的控件隐藏软键盘功能是 Android 开发中的一项常见需求。通过隐藏软键盘,可以提高用户体验,并减少用户的不必要操作。...
然而,在某些场景下,我们可能希望用户在完成输入后,通过点击屏幕空白区域就能自动隐藏软键盘,以优化用户体验。这个功能在手机设备上尤其重要,因为它能避免因键盘遮挡其他内容导致的操作不便。 实现“点击空白...
标题"android 点击空白区域,隐藏输入法"和描述"android 点击空白区域,隐藏键盘"指的是在用户点击屏幕非输入框区域时,自动收起软键盘的行为。这通常用于提高用户体验,特别是在移动设备上,屏幕空间有限,隐藏不...
然而,一个常见的需求是在用户完成编辑后,点击Dialog之外的空白区域能够隐藏软键盘,但不关闭Dialog本身。以下是如何实现这一功能的详细步骤: 一、需求分析: 在某些应用中,比如用户填写表单或搜索框,我们希望...
为了在 Flutter 应用中统一这种体验,我们需要实现一个功能,即全局点击空白处隐藏键盘。本文将详细介绍如何在 Flutter 中实现这一功能。 首先,针对单个 `TextField` 的情况,我们可以利用 `FocusNode` 来处理键盘...
然而,有时我们希望用户在点击EditText之外的任何地方时能够自动隐藏软键盘,以提供更好的用户体验。本篇文章将介绍两种实现这一功能的方法。 ### 实现方法一:设置父布局点击事件 1. 首先,在布局文件中,为当前...
当我们需要在Dialog中包含一个EditText供用户输入时,通常会遇到一个问题:如何在Dialog关闭时自动隐藏软键盘。以下是一个详细解释如何正确处理这个问题的步骤。 首先,让我们分析问题的核心:在Dialog的`onDismiss...
"Android-keyboard-dismisser" 是一个专为Android设计的库,旨在优化用户体验,通过允许用户点击键盘之外的任何区域来自动隐藏软键盘。这个库解决了在输入框激活时,用户可能遇到的因键盘遮挡屏幕其他部分而造成的...
先上效果图如下,方格样式,以及点击空白处隐藏软键盘。 控件实现清单: 1)集成于EditText的输入框控件:PasswordInputView.java 2)数字键盘工具类:NumKeyboardUtil.java 3)xml文件:number.xml 4)attrs...
在移动应用开发中,尤其是iOS和Android平台,经常会遇到一个问题:当用户在输入框中输入时,弹出的软键盘可能会遮挡住屏幕下方的部分内容,包括其他控件或按钮。这种情况给用户带来了不便,因为他们无法直接触达或...
在某些情况下,可能需要处理点击屏幕空白处时输入法消失的需求。这可以通过重写`dispatchTouchEvent`方法,并在该方法中判断触摸事件是否发生在EditText之外,如果是,则隐藏软键盘。以下是实现这一功能的代码示例:...
通过上述解析,我们可以清楚地了解到如何在 Android 应用中实现“点击空白处,隐藏输入法”的功能。这种方法不仅可以提升用户体验,还能让应用程序更加符合用户的使用习惯。开发者可以根据实际需求调整代码逻辑,以...