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 软键盘的全面解析,让你不再怕控件被遮盖

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容