AlertDialog con EditText, abre el teclado virtual automáticamente con el enfoque en EditText no funciona
Estoy tratando de obtener un pedazo de trabajo de código que debe enfocar un EditText en un AlertDialog tan pronto como se muestre y, a continuación, abrir automáticamente el teclado suave. En su lugar, sólo hace que la pantalla se vuelva más oscura.
Builder builder = new Builder(this); final EditText input = new EditText(this); AlertDialog dialog = builder.create(); builder .setTitle(R.string.dialog_title_addsubject) .setMessage(R.string.dialog_addsubject) .setView(input) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { String value = input.getText().toString(); if (input.getText().toString().trim().length() == 0) { Toast.makeText(Main.this, R.string.input_empty, Toast.LENGTH_SHORT).show(); } else { db.insertSubject(value); getData(); } } }) .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }); input.requestFocus(); dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); dialog.show();
He intentado muchas maneras de hacer esto pero ninguno funcionó. Espero que ustedes puedan ayudarme aquí. ¡Gracias por adelantado!
- ¿Cómo quitar el foco del fragmento trasero de la pila?
- Enfoque en el diseño GridView
- Borrar enfoque EditText cuando se pulsa el botón Atrás cuando se muestra el teclado virtual
- Android SearchView OnFocusChangeListener: onFocusChange no se llama en absoluto
- Detenga el foco de dpad saliendo del fragmento actual en android
- Cómo evitar que aparezca automáticamente el teclado de Android cuando comience la actividad
- Comportamiento extraño en el navegador de Android al seleccionar campos
- Distancias de enfoque de la cámara
- Problema de enfoque en la visualización de ListView EditText en el cuadro de diálogo en Android
- Borrar edittext enfocar y ocultar el teclado cuando se pulsa el botón
Ok, me las arreglé para hacerlo funcionar:
Builder builder = new Builder(this); final EditText input = new EditText(this); builder .setTitle(R.string.dialog_title_addsubject) .setMessage(R.string.dialog_addsubject) .setView(input) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { String value = input.getText().toString(); if (input.getText().toString().trim().length() == 0) { Toast.makeText(Main.this, R.string.input_empty, Toast.LENGTH_SHORT).show(); } else { db.insertSubject(value); getData(); } InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(input.getWindowToken(), 0); } }) .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(input.getWindowToken(), 0); } }); builder.show(); input.requestFocus(); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
Este método no necesita un diálogo, así que puedo usar builder.show () para mostrar el diálogo y el código proporcionado por Sabre abre el teclado virtual. Otro fragmento de código en cada uno de los botones cierra el teclado virtual automáticamente.
Puede usar esto en lugar de dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
Llame a esto después de dialog.show();
Intente mostrarlo después de un segundo –
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { input.requestFocus(); dialog.getWindow(). setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); dialog.show(); }, 1000)