El siguiente código trabajó para mí, después de que los otros dos respuestas no funcionó para mí:
@Override
public void onResume() {
super.onResume();
SingletonBus.INSTANCE.getBus().register(this);
//passwordInput.requestFocus(); <-- that doesn't work
passwordInput.postDelayed(new ShowKeyboard(), 300); //250 sometimes doesn't run if returning from LockScreen
}
Dónde ShowKeyboard
es
private class ShowKeyboard implements Runnable {
@Override
public void run() {
passwordInput.setFocusableInTouchMode(true);
// passwordInput.requestFocusFromTouch();
passwordInput.requestFocus();
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(passwordInput, 0);
}
}
Después de una entrada exitosa, también me aseguro de ocultar el teclado
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE))
.hideSoftInputFromWindow(getView().getWindowToken(), 0);
Técnicamente, me acaba de agregar 300 ms de retardo antes de ejecutar la solicitud de visualización teclado en pantalla. Raro, ¿verdad? También cambió requestFocus()
a requestFocusFromTouch()
.
EDITAR: No usar requestFocusFromTouch()
da un evento táctil al iniciador. Quédese con requestFocus()
.
Edit2: En Diálogos (DialogFragment
), utilice el siguiente
getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
en lugar de
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
mismo resultado que requestFocus() por sí sola ... El campo se centrará pero el teclado en pantalla no se dispara – fiddler
Finalmente resolví el emitido llamando 'field.requestFocus()' en el método 'onResume()' de la actividad (en lugar de 'onCreate()'). No sé exactamente por qué funciona ... – fiddler
Una vista no puede enfocar antes de que realmente se haya distribuido en la pantalla. Esto no se puede hacer mientras que onCreate() contiene el hilo de UI, por lo tanto, la vista se presenta directamente después de onCreate() y antes de onResume(). :) – pgsandstrom