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