studio programación programacion herramientas gratis fundamentos curso crear con avanzado aplicaciones android android-edittext

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)); } });