自动隐藏软键盘和替换Fragment后软键盘无法弹出的问题
一、自动隐藏软键盘
在Android中,只要点击EditText及其子类,软键盘都会自动弹出,但是让人不解的是,点击非EditText及其子类的控件后,软键盘是不会自动隐藏的。
所以,我们就需要在Activity中解决这个问题。
二、替换Fragment后软键盘无法弹出的问题
1. 在容器中添加一个Fragment
2. 调用FragmentTransaction的replace方法替换一个包含EditText的Fragment, 点击EditText软键盘是不会弹出的
三、解决方法:
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (isAutoHideSoftInput()) {
View currentFocus = getCurrentFocus();
if (currentFocus != null && currentFocus instanceof EditText) {
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
if (imm.isActive()) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
currentFocus.setTag(R.id.ids_auto_hide_softinput_value, true);
if (!Boolean.TRUE.equals(currentFocus.getTag(R.id.ids_auto_hide_softinput_listener))) {
currentFocus.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
v.setTag(R.id.ids_auto_hide_softinput_value, false);
v.clearFocus(); // 解决替换Fragment后软键盘无法弹出的问题
v.requestFocus();
}
return false;
}
});
currentFocus.setTag(R.id.ids_auto_hide_softinput_listener, true);
}
break;
case MotionEvent.ACTION_UP:
if (Boolean.TRUE.equals(currentFocus.getTag(R.id.ids_auto_hide_softinput_value))) {
imm.hideSoftInputFromWindow(currentFocus.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
currentFocus.setTag(R.id.ids_auto_hide_softinput_value, false);
}
break;
}
}
}
}
return super.dispatchTouchEvent(ev);
}
浙公网安备 33010602011771号