Я использую FrameLayout
, чтобы показать EditText
и ListView
(с флажками) поочередно. При показе EditText
я хотел бы отобразить мягкую клавиатуру. И, показывая ListView
, я хотел бы, чтобы скрытая клавиатура была скрыта. Теперь обычно требуется фокус, чтобы скрыть мягкую клавиатуру. Когда мой ListView
будет показан, то getCurrentFocus()
возвращает null
. Есть ли способ скрыть мягкую клавиатуру, не имея фокуса?Скрытие мягкой клавиатуры без фокусировки
Я показываю мягкую клавиатуру так:
public static void requestFocusAndMoveCursorToTheEndAndShowKeyboard(final EditText editTextParam, final Activity activityParam) {
if (editTextParam == null) {
return;
}
if (editTextParam.requestFocus()) {
editTextParam.setSelection(editTextParam.getText().length()); // move Cursor to the end of the EditText
InputMethodManager imm = (InputMethodManager) activityParam.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
}
}
И я пытаюсь скрыть экранную клавиатуру так:
public static void hideSoftInputKeyboardFromWindow(Activity activityParam) {
if (activityParam == null) {
return;
}
View view = activityParam.getCurrentFocus();
if (view != null) {
InputMethodManager inputMethodManager = (InputMethodManager) activityParam.getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
}