隐藏和弹出软键盘的实现方法


一.在Fragment中实现点击其他位置隐藏金盘

问题:Fragment无法重写dispatchTouchEvent方法

Fragment连接Activity的方法:https://blog.csdn.net/qq_34902522/article/details/77963129

触摸事件分类:

https://blog.csdn.net/xyz_lmn/article/details/12517911

一.解决方法

1.先创建一个interface,参数不能乱写

 public interface OnHideKeyboardListener  {
    public boolean hideKeyboard(KeyEvent event);
}

2.调用上面的接口,然后把fragment的父Activiy在顶部声明一下,然后重写onAttach方法(不过目前已经不提倡用activity为参数了了)

MainActivity mainActivity;
//获取通信
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        mainActivity = (MainActivity) activity;
        mainActivity.setOnHideKeyboardListener(this);

    }
    @Override
    public boolean hideKeyboard(KeyEvent event) {
        return false;
    }

3.在父Activity写接口的set实例化创建方法

public void setOnHideKeyboardListener(OnHideKeyboardListener onHideKeyboardListener){
        this.onHideKeyboardListener = onHideKeyboardListener;
    }

4.在父Activity重写dispatchTouchEvent方法即可

@Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
            View view = getCurrentFocus();
            if (isShouldHideInput(view, ev)) {
                InputMethodManager Object = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                if (Object != null) {
                    Object.hideSoftInputFromWindow(view.getWindowToken(), 0);
                }
            }
        }
        return super.dispatchTouchEvent(ev);
    }
    //判断是否隐藏键盘
    public boolean isShouldHideInput(View v, MotionEvent event) {
        if (v != null && (v instanceof EditText)) {
            int[] leftTop = {0, 0};
//获取输入框当前的location位置
            v.getLocationInWindow(leftTop);
            int left = leftTop[0];
            int top = leftTop[1];
            int bottom = top + v.getHeight();
            int right = left + v.getWidth();
            if (event.getX() > left && event.getX() < right
                    && event.getY() > top && event.getY() < bottom) {
// 点击的是输入框区域,保留点击EditText的事件
                return false;
            } else {
                return true;
            }
        }
        return false;
    }

二.实现对按钮添加点击事件隐藏键盘

代码:

 private void closeKeyboard() {
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        // 得到InputMethodManager的实例
        if (imm.isActive()) {
            // 如果开启
            Log.e(TAG, "closeKeyboard: "+imm.isActive());
            imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,
                    InputMethodManager.HIDE_NOT_ALWAYS);
            // 关闭软键盘,开启方法相同,这个方法是切换开启与关闭状态的
        }
    }

文章作者: 灿若星河
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 灿若星河 !
评论
 上一篇
对于EditText的一些常见问题 对于EditText的一些常见问题
一.如何自定义设置长按时选取的文字区域高亮颜色 android:textColorHighlight="@color/highlight" 二.如何自定义设置选中文字区域两旁的小水滴图片要自己找 android:textSelect
2020-10-23 灿若星河
下一篇 
如何上传项目到github 如何上传项目到github
注意:先找到你想要上传的项目,然后在该项目文件夹中开启gitBush,然后因为基本就是所有文件都上传,所以第二部那里直接git add .就可以了,别漏了点 git init //初始化仓库 git add .(文件name) //添加文件
2020-09-27
  目录