Der folgende Code hat bei mir funktioniert , nachdem die beiden anderen Antworten bei mir nicht funktioniert haben :
@Override
public void onResume() {
super.onResume();
SingletonBus.INSTANCE.getBus().register(this);
passwordInput.postDelayed(new ShowKeyboard(), 300);
}
Wo ShowKeyboard
ist
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);
}
}
Nach einer erfolgreichen Eingabe stelle ich auch sicher, dass ich die Tastatur verstecke
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE))
.hideSoftInputFromWindow(getView().getWindowToken(), 0);
Technisch gesehen habe ich gerade 300 ms Verzögerung hinzugefügt, bevor ich die Soft-Tastatur-Anzeigeanforderung ausgeführt habe. Verrückt oder? Auch geändert requestFocus()
zu requestFocusFromTouch()
.
BEARBEITEN: Verwenden Sie requestFocusFromTouch()
es nicht, um dem Launcher ein Touch-Ereignis zu geben. Bleib bei requestFocus()
.
EDIT2: Verwenden Sie in Dialogs ( DialogFragment
) Folgendes
getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
anstatt
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);