做项目的时候有个需求,在有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 软键盘的全面解析,让你不再怕控件被遮盖
网友评论