自动隐藏软键盘和替换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); }