Poniższy kod pracował dla mnie , po dwóch innych odpowiedzi nie działa dla mnie :
@Override
public void onResume() {
super.onResume();
SingletonBus.INSTANCE.getBus().register(this);
passwordInput.postDelayed(new ShowKeyboard(), 300);
}
Gdzie ShowKeyboardjest
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);
}
}
Po udanym wprowadzeniu upewniam się, że ukryłem klawiaturę
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE))
.hideSoftInputFromWindow(getView().getWindowToken(), 0);
Technicznie, właśnie dodałem 300 ms opóźnienia przed uruchomieniem żądania wyświetlania klawiatury programowej. Dziwne, prawda? Zmieniono również requestFocus()na requestFocusFromTouch().
EDYCJA: Nie używaj requestFocusFromTouch(), daje to zdarzenie dotykowe programowi uruchamiającemu. Trzymaj się requestFocus().
EDIT2: W Dialogs ( DialogFragment) użyj następującego
getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
zamiast
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);