Android 中软键盘的坑

做项目的时候有个需求,在有EditText输入框的界面,输入法弹出的情况下,点击界面任意空白地方隐藏输入法。

于是我在 Activity 的 onTouchEvent() 做了如下处理:

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            //触摸屏幕空白出隐藏输入法
            ((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(0,
                    InputMethodManager.HIDE_NOT_ALWAYS);

        }
        return super.onTouchEvent(event);
    }

虽然有输入法的情况下触摸空白区域是确实隐藏了输入法,但是这时候出现了另一个问题,在没有显示输入法的情况想触摸空白区域又弹出输入法来了,而且是不管EditText有没有焦点都会弹出来。

于是换另一种方式隐藏输入法:

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            //触摸屏幕空白出隐藏输入法
            ((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE))
                    .hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0); //隐藏输入法
        }
        return super.onTouchEvent(event);
    }

问题终于解决了。
toggleSoftInput() 方法,是让软键盘在显示和隐藏之间切换。它是一个开关的方法,会根据当前的状态做相反的操作。

通过以下两篇文章应该能理解Android 软键盘:
Android 软键盘的显示和隐藏,这样操作就对了
Android 软键盘的全面解析,让你不再怕控件被遮盖

你可能感兴趣的:(Android 中软键盘的坑)