美文网首页
android 点击空白处收起软键盘

android 点击空白处收起软键盘

作者: 十三妹儿儿儿 | 来源:发表于2021-08-12 15:33 被阅读0次
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
            // 获得当前得到焦点的View,一般情况下就是EditText(特殊情况就是轨迹求或者实体案件会移动焦点)
            View v = getCurrentFocus();
            if (KeyBoardUtil.isShouldHideInput(v, ev)) {
                KeyBoardUtil.hideKeyboard(v);
            }
        }
        return super.dispatchTouchEvent(ev);
    }
    

    public class KeyBoardUtil {
    /**
    * 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘,因为当用户点击EditText时没必要隐藏
    *
    * @param v
    * @param event
    * @return
    /
    public static 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 view
    /
    public static void hideKeyboard(View view) {
    InputMethodManager imm = (InputMethodManager) view.getContext()
    .getSystemService(Context.INPUT_METHOD_SERVICE);
    if (imm != null) {
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }
    }
    /
    *
    * 显示软键盘
    *
    * @param view
    */
    public static void showKeyboard(View view) {
    InputMethodManager imm = (InputMethodManager) view.getContext()
    .getSystemService(Context.INPUT_METHOD_SERVICE);
    if (imm != null) {
    view.requestFocus();
    imm.showSoftInput(view, 0);
    }
    }
    }

    相关文章

      网友评论

          本文标题:android 点击空白处收起软键盘

          本文链接:https://www.haomeiwen.com/subject/pwecbltx.html