studio programacion herramientas fundamentos con avanzado aplicaciones android android-softkeyboard android-input-method

android - programacion - Al usar AlertDialog.Builder con EditText, el Teclado suave no aparece



manual de android en pdf (10)

Cuando llama a showDialog para mostrar un Diálogo creado usando AlertDialog en onCreateDialog

Debes poner el código aquí

@Override protected void onPrepareDialog (int id, Dialog dialog, Bundle args) { TextView editText=(TextView) dialog.findViewById(R....); editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); } } }); }

Estoy usando AlertDialog.Builder para crear un cuadro de entrada, con EditText como método de entrada.

Desafortunadamente, el Teclado suave no aparece, aunque EditText está enfocado, a menos que lo toque explícitamente de nuevo.

¿Hay alguna manera de obligarlo a explotar?

Intenté lo siguiente, después de (AlertDialog.Builder) .show (); pero fue en vano.

InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); mgr.showSoftInput(input, InputMethodManager.SHOW_FORCED);

Cualquiera puede ayudar?

¡¡Gracias!!


Descubrí que el mismo código funciona correctamente en la tableta, el teclado aparece, pero en el teléfono no, por lo que investigar más, parece apuntar a la opción "ajustar".

Estoy usando esto, me siento mucho más limpio.

AlertDialog d = builder.create(); d.getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); d.show();


En mi caso, la única manera en que pude mostrar el teclado cuando se mostró el DialogFragment diálogo fue agregando a mi DialogFragment :

@Override public void onResume() { super.onResume(); getDialog().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); myEditText.requestFocus(); }

Tenga en cuenta el SOFT_INPUT_STATE_ALWAYS_VISIBLE en lugar de SOFT_INPUT_STATE_VISIBLE .

De la documentación:

int SOFT_INPUT_STATE_ALWAYS_VISIBLE Visibility state for softInputMode: please always make the soft input area visible when this window receives input focus.


Esto ya fue respondido here . Usar un OnFocusChangeListener funcionó para mí.


He hecho tal cosa

AlertDialog.Builder b = new AlertDialog.Builder(this);//.... AlertDialog dialog = b.create(); dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); dialog.show();


He logrado resolverlo así:

Dialog = builder.create(); Dialog.show(); Dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); Dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);


Prueba esto, funciona para mí

Si desea visualizar el teclado virtual:

InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(input.getWindowToken(), 0);

Y si quieres ocultarlo:

InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(input.getWindowToken(), 0);


Una solución mucho mejor se da here .

dialog.getWindow().clearFlags( WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);

Sin solución alternativa EditText comporta como se esperaba.


Window window = dialog.getWindow(); window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);


final AlertDialog.Builder alert = new AlertDialog.Builder(context); final AlertDialog dialog = alert.show(); dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);