Android点击空白处,隐藏软键盘

在做登陆或者注册的时候,软键盘经常可能会挡住一些界面。我们需要在输入完成之后隐藏软键盘。

在我们点击空白处或者非EditText的地方来隐藏软键盘。

public class HomeActivity extends Activity {
    ......
    @Override
    public 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);
        }
    }
  ......
}

  

在isShouldHideInput中不应该使用event.getX()函数,而是应该用event.getRawX()函数

public final float getRawX ()
Added in API level 1
Returns the original raw X coordinate of this event. For touch events on the screen, this is the original location of the event on the screen, before it had been adjusted for the containing window and views.

  

这个是相对于屏幕左上角的点

public final float getX ()
Added in API level 1
getX(int) for the first pointer index (may be an arbitrary pointer identifier).
这个是触摸点相对于该widget的坐标
InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        im.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),  InputMethodManager.HIDE_NOT_ALWAYS);

  

时间: 2024-11-07 01:11:18

Android点击空白处,隐藏软键盘的相关文章

Android 点击空白处隐藏键盘

方法一:使用android的分发机制(代码稍微有点多) /**  * 实现点击空白处,软键盘消失事件  * @param ev  * @return  */ @Override public boolean dispatchTouchEvent(MotionEvent ev) {     if (ev.getAction() == MotionEvent.ACTION_DOWN) {         // 获得当前得到焦点的View,一般情况下就是EditText(特殊情况就是轨迹求或者实体案件

Android开发之如何隐藏软键盘

在Activity文件中加入下面的函数,实现点击空白处隐藏键盘: 1 @Override 2 public boolean onTouchEvent(MotionEvent event) 3 { 4 if(event.getAction()==MotionEvent.ACTION_DOWN){ 5 if(this.getCurrentFocus().getWindowToken()!=null){ 6 //获取此Activity的软键盘服务 7 InputMethodManager imm=(I

【转】 Android 手动显示和隐藏软键盘

1.方法一(如果输入法在窗口上已经显示,则隐藏,反之则显示) 1 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 2 imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); 2.方法二(view为接受软键盘输入的视图,SHOW_FORCED表示强制显示) 1 InputMethodManager

Android手动显示和隐藏软键盘

1.方法一(如果输入法在窗口上已经显示,则隐藏,反之则显示) [java] view plaincopy InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); 2.方法二(view为接受软键盘输入的视图,SHOW_FORCED表示强制显示) [j

Android 手动显示和隐藏软键盘

转:http://blog.csdn.net/h7870181/article/details/8332991 1.方法一(如果输入法在窗口上已经显示,则隐藏,反之则显示) InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); 2.方法二(vie

android 手动显示与隐藏软键盘HIDE_NOT_ALWAYS

1.方法一(如果输入法在窗口上已经显示,则隐藏,反之则显示) [java] view plaincopyprint? InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); 2.方法二(view为接受软键盘输入的视图,SHOW_FORCED表示强制

安卓点击屏幕空白处隐藏软键盘

安卓开发中遇到问题的解决,网上搜索到的方法有一些问题,故而采用如下方法 方法/步骤 给activity布局文件加入  id <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" andro

IOS开发点击空白处隐藏虚拟键盘的几种方法:

OS开发中经常要用到输入框,默认情况下点击输入框就会弹出键盘,但是必须要实现输入框return的委托方法才能取消键盘的显示,对于用户体验来说很不友好,我们可以实现点击键盘以外的空白区域来将键盘隐藏,以下我总结出了几种隐藏键盘的方法: 首先说明两种可以让键盘隐藏的Method: 1.[view endEditing:YES]  这个方法可以让整个view取消第一响应者,从而让所有控件的键盘隐藏. 2.[textFiled resignFirstResponder] 这个则是比较常用的让某个text

android 点击屏幕关闭 软键盘

//点击屏幕 关闭输入弹出框 @Override public boolean onTouchEvent(MotionEvent event) { InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); im.hideSoftInputFromWindow(getCurrentFocus().getApplicationWindowToken(), InputMetho

IOS 隐藏软键盘的3种方法

IOS开发里软键盘是经常需要打交道的地方,下面为大家带来我整理总结的3种隐藏键盘的方法. 使用软键盘的 Done 键隐藏键盘 出发软键盘隐藏最常用的事件是文本框的 Did End on Exit,它在用户按软键盘中的 Done 键时发生.选中一个UITextField控件,点击鼠标右键弹出面板,鼠标左键按住 Did End on Exit 事件旁边的圆圈,然后拖曳到右侧 .h 文件中,命名为 CloseTheKeyBoard,在 m 文件中具体实现如下图所示(此处同时显示 .h 文件与 .m 文