`
xuanzhui
  • 浏览: 201518 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Android点击空白处隐藏软键盘

阅读更多

首先声明下,以下内容主要参考自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以外的地方隐藏软键盘

    在Android开发中,用户界面的...通过以上步骤,我们就实现了在Android应用中,点击EditText以外的地方或屏幕空白区域自动隐藏软键盘的功能。这种方法可以提升用户体验,使得在有限的屏幕空间中更容易进行多任务操作。

    Android Studio点击空白处收起软键盘

    Android Studio点击空白处收起软键盘 //点击空白区域隐藏键盘 @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { View v = getCurrentFocus();...

    点击空白区域隐藏软键盘

    标题"点击空白区域隐藏软键盘"所描述的技术解决方案就是针对这一需求而设计的。这种功能使得用户在不需要点击返回键或者特定关闭键盘的按钮时,只需点击屏幕空白区域,就能自动收起软键盘,从而提升用户体验和操作...

    Android 点击屏幕空白处收起输入法软键盘(手动打开)

    这段代码会在用户点击屏幕非EditText区域时隐藏软键盘,同时允许用户在EditText内进行正常输入。 总的来说,通过监听触摸事件并结合`InputMethodManager`服务,开发者可以在Android应用中实现用户友好的交互,使得...

    Android 中自定义Dialog样式的Activity点击空白处隐藏软键盘功能(dialog不消失)

    然而,一个常见的需求是在用户完成编辑后,点击Dialog之外的空白区域能够隐藏软键盘,但不关闭Dialog本身。以下是如何实现这一功能的详细步骤: 一、需求分析: 在某些应用中,比如用户填写表单或搜索框,我们希望...

    Android编程实现点击EditText之外的控件隐藏软键盘功能

    Android 编程实现点击EditText之外的控件隐藏软键盘功能 Android 编程实现点击EditText之外的控件隐藏软键盘功能是 Android 开发中的一项常见需求。通过隐藏软键盘,可以提高用户体验,并减少用户的不必要操作。...

    点击空白隐藏EditText软件盘

    然而,在某些场景下,我们可能希望用户在完成输入后,通过点击屏幕空白区域就能自动隐藏软键盘,以优化用户体验。这个功能在手机设备上尤其重要,因为它能避免因键盘遮挡其他内容导致的操作不便。 实现“点击空白...

    android 点击空白区域,隐藏输入法

    标题"android 点击空白区域,隐藏输入法"和描述"android 点击空白区域,隐藏键盘"指的是在用户点击屏幕非输入框区域时,自动收起软键盘的行为。这通常用于提高用户体验,特别是在移动设备上,屏幕空间有限,隐藏不...

    Flutter 全局点击空白处隐藏键盘实战

    为了在 Flutter 应用中统一这种体验,我们需要实现一个功能,即全局点击空白处隐藏键盘。本文将详细介绍如何在 Flutter 中实现这一功能。 首先,针对单个 `TextField` 的情况,我们可以利用 `FocusNode` 来处理键盘...

    Android点击EditText文本框之外任何地方隐藏键盘的解决办法

    然而,有时我们希望用户在点击EditText之外的任何地方时能够自动隐藏软键盘,以提供更好的用户体验。本篇文章将介绍两种实现这一功能的方法。 ### 实现方法一:设置父布局点击事件 1. 首先,在布局文件中,为当前...

    Android 开发之Dialog中隐藏键盘的正确使用方法

    当我们需要在Dialog中包含一个EditText供用户输入时,通常会遇到一个问题:如何在Dialog关闭时自动隐藏软键盘。以下是一个详细解释如何正确处理这个问题的步骤。 首先,让我们分析问题的核心:在Dialog的`onDismiss...

    Android-keyboard-dismisser一个实现点击任何键盘外的部分来取消键盘的Android库

    "Android-keyboard-dismisser" 是一个专为Android设计的库,旨在优化用户体验,通过允许用户点击键盘之外的任何区域来自动隐藏软键盘。这个库解决了在输入框激活时,用户可能遇到的因键盘遮挡屏幕其他部分而造成的...

    Android自定义密码输入框和数字键盘

    先上效果图如下,方格样式,以及点击空白处隐藏软键盘。 控件实现清单: 1)集成于EditText的输入框控件:PasswordInputView.java 2)数字键盘工具类:NumKeyboardUtil.java 3)xml文件:number.xml 4)attrs...

    键盘遮挡空白返回

    在移动应用开发中,尤其是iOS和Android平台,经常会遇到一个问题:当用户在输入框中输入时,弹出的软键盘可能会遮挡住屏幕下方的部分内容,包括其他控件或按钮。这种情况给用户带来了不便,因为他们无法直接触达或...

    EditText输入法

    在某些情况下,可能需要处理点击屏幕空白处时输入法消失的需求。这可以通过重写`dispatchTouchEvent`方法,并在该方法中判断触摸事件是否发生在EditText之外,如果是,则隐藏软键盘。以下是实现这一功能的代码示例:...

    隐藏输入法

    通过上述解析,我们可以清楚地了解到如何在 Android 应用中实现“点击空白处,隐藏输入法”的功能。这种方法不仅可以提升用户体验,还能让应用程序更加符合用户的使用习惯。开发者可以根据实际需求调整代码逻辑,以...

Global site tag (gtag.js) - Google Analytics