У меня есть приложение, и вам нужно закрыть программную клавиатуру на довольно большом количестве действий. Например, при нажатии кнопки, когда новый макет рисуется, при изменении ориентации экрана, когда контроллер сообщает strong > пользовательский интерфейс, и т.д. Я использую optionsMenuButton, чтобы перевернуть представление с помощью ViewFlipper, и, очевидно, я хочу, чтобы клавиатура скрывалась в перевернутом виде (там нет поля ввода).
Я пробовал это до сих пор и говорю, почему они ненадежны:
Это не сработало, потому что у меня много editTexts и другие представления. Мне нужен более общий, тот, который не требует представления как аргумента, если это возможно.
InputMethodManager imm = (InputMethodManager)getSystemService(
Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
Для меня это вообще не работает:
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Это работает, но сразу же снова появляется клавиатура при просмотре представления.
InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
Это работает иногда, но getCurrentFocus() возвращает null большую часть времени.
InputMethodManager inputManager = (InputMethodManager)
Context.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
Этот режим работает только при отображении клавиатуры:
getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
Это не работает с EditText, как первый фрагмент кода, но с корневым макетом, который изменяется при изменении ориентации и каждый раз, когда вызывается oncreate. У меня есть другой формат XML для пейзажа/портрета и обычного/большого. Все корневые макеты имеют идентификатор root
. Это работает в первый раз, но после этого он больше не работает.
InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(findViewById(R.id.root).getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
Bottomline: Я пробовал много способов скрытия программных клавиш, но никто из них, похоже, не работает надежно. Есть ли способ надежного скрытия мягкой клавиатуры?