programacion - Android TextField: establecer foco+entrada suave mediante programación
manual android studio avanzado (4)
Aquí está el código que funcionó para mí.
edittext.post(new Runnable() {
public void run() {
edittext.requestFocusFromTouch();
InputMethodManager lManager = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
lManager.showSoftInput(edittext, 0);
}
});
¡Eso es! Disfrutar;)
En mi opinión, tengo un Texto de búsqueda de búsqueda y me gustaría activar mediante programación el comportamiento de un evento de clic en el campo, es decir, enfocar el campo de texto Y mostrar el teclado virtual si es necesario (si no hay un teclado disponible).
He intentado field.requestFocus()
. El campo realmente se enfoca pero el teclado virtual no se muestra.
Intenté field.performClick()
. Pero eso solo llama al OnClickListener del campo.
Alguna idea ?
Buen señor, intente esto:
edittext.setFocusableInTouchMode(true);
edittext.requestFocus();
No estoy seguro, pero esto podría ser necesario en algunos teléfonos (algunos de los dispositivos más antiguos):
final InputMethodManager inputMethodManager = (InputMethodManager) context
.getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.showSoftInput(edittext, InputMethodManager.SHOW_IMPLICIT);
El siguiente código funcionó para mí , después de las otras dos respuestas no funcionaron 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
}
Donde 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, acabo de agregar 300 ms de retraso antes de ejecutar la solicitud de visualización del teclado virtual. Raro, ¿verdad? También se cambió requestFocus()
a requestFocusFromTouch()
.
EDITAR: No use requestFocusFromTouch()
le da un evento táctil al lanzador. Quédate con requestFocus()
.
EDIT2: En Diálogos ( DialogFragment
), use lo siguiente
getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
en lugar de
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
field.post(new Runnable() {
@Override
public void run() {
field.requestFocus();
field.onKeyUp(KeyEvent.KEYCODE_DPAD_CENTER, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_CENTER));
}
});