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

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

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

工具类:TextUntil:

public static void hideKeyboard(MotionEvent event, View view,
                                    Activity activity) {
        try {
            if (view != null && view instanceof EditText) {
                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();
        }
    }

    PS:    这里需要传入三个参数: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();
                TextUtil.hideKeyboard(ev, view, BaseActivity.this);//调用方法判断是否需要隐藏键盘
                break;

            default:
                break;
        }
        return super.dispatchTouchEvent(ev);
    }
这是写在父类Activity里的dispatchTouchEvent方法。 

代码不多,注释较详细,就不细说了。

可直接使用,亲测有效

猜你喜欢

转载自blog.csdn.net/zuo_er_lyf/article/details/80507363
今日推荐