Наступний код працює для мене , після того , як два інших відповідей не працює для мене :
@Override
public void onResume() {
super.onResume();
SingletonBus.INSTANCE.getBus().register(this);
passwordInput.postDelayed(new ShowKeyboard(), 300);
}
Де ShowKeyboard
є
private class ShowKeyboard implements Runnable {
@Override
public void run() {
passwordInput.setFocusableInTouchMode(true);
passwordInput.requestFocus();
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(passwordInput, 0);
}
}
Після успішного введення я також переконуюсь, що приховую клавіатуру
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE))
.hideSoftInputFromWindow(getView().getWindowToken(), 0);
Технічно я щойно додав 300 мс затримки перед запуском запиту дисплея програмної клавіатури. Дивно, правда? Також змінено requestFocus()
на requestFocusFromTouch()
.
РЕДАГУВАТИ: Не використовуйте, requestFocusFromTouch()
це дає сенсорну подію для запуску. Дотримуйтесь requestFocus()
.
EDIT2: У діалогових вікнах ( DialogFragment
) використовуйте наступне
getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
замість
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);