Los diálogos (dialogs) en Android no son más que una pequeña ventana personalizables a través de estilos y layouts que pueden emplearse al realizar determinadas opciones como campos de selección, controles personalizados, formularios y/o mostrar alguna información precisa.
La SDK de Android cuenta con una clase incorporada accesible mediante: android.app.AlertDialog
y una segunda incorporada en la librería de soporte accesible a través de android.support.v7.app.AlertDialog.Builder
; aparte de una diferencia visual entre las dos (la de la librería de soporte cuenta con un estilo a lo Material Design), ambas cuentas con métodos diferentes que puedes consultar en los siguientes enlaces:
Para los efectos de esta entrada es indiferente por cuál de las dos clases desees trabajar -aunque lo más recomendable es que emplees la librería de soporte al traer una mayor cantidad de nuevas características y al encontrarse en constante evolución.
Diálogos (dialogs) en Android
En esta entrada veremos los distintos tipos de dialogs en Android.
Diálogo simple de mensaje en Android
El más simple de todos está formado de un diálogo con un mensaje; para crearlo en Android es necesario emplear dos clases:
- La clase
AlertDialog
para mostrar u ocultar el diálogo. - La clase
AlertDialog.Builder
para establecer mensajes (.setMessage()
), título (setTitle()
), layout (setView()
), estilo, botones (setNegativeButton()
ysetPositiveButton()
ysetCancelable()
), el tipo de diálogo (vea los demás ejemplos) entre otros aspectos.
A continuación se muestra como construir un simple diálogo con un mensaje empleando los métodos vistos anteriormente:
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.DialogLevelsStyle);
builder.setMessage("Hola mundo: Mensaje.")
.setTitle("Hola mundo: Título.")
.setPositiveButton(ResourceService.get(R.string.dialog_ok, this), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// hacer algo
}
});
dialogIcon = builder.create();
dialogIcon.show();
En el ejemplo anterior establecimos un botón de aceptación o "botón positivo" y su evento escuchador a través del método setPositiveButton()
y la interfaz DialogInterface.OnClickListener()
:
Con el método show() mostramos el diálogo.
Con el código Java anterior obtenemos el siguiente resultado:
Que como podemos ver es un simple diálogo con un cuerpo o mensaje; este puede ser considerado el diálogo más simple que se pueda construir; a continuación mostraremos otras variantes de dialogs en Android.
Diálogo de confirmación en Android
También es posible establecer un botón de negación y el evento escuchador del botón de negación lo que viene siendo un caso similar del botón de aceptación:
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.DialogLevelsStyle);
builder.setMessage("Hola mundo: Mensaje.")
.setTitle("Hola mundo: Título.")
.setNegativeButton(ResourceService.get(R.string.dialog_ok, this), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.setPositiveButton(ResourceService.get(R.string.dialog_cancel, this), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (dialog != NULL) {
dialog.cancel();
}
}
});
dialogIcon = builder.create();
dialogIcon.show();
El botón de negación simplemente cierra el diálogo a través del método .cancel()
, pero puede realizar cualquier otra acción.
Diálogos de selección simple en Android
Si deseas implementar una Interfaz la cual requiere que el usuario pueda seleccionar una de muchas opción, debes emplear el método setItems()
como se detalla a continuación:
final String[] items = {"Op 1", "Op 2", "Op 3"};
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.DialogLevelsStyle);
builder.setTitle("Hola mundo: Título.")
.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
Log.i("Dialog", "Op: " + items[item]);
}
});
dialogIcon = builder.create();
dialogIcon.show();
Diálogos de selección simple con radio en Android
Otra variante del ejemplo anterior es emplear selectores parecidos a los radios en HTML:
final String[] items = {"Op 1", "Op 2", "Op 3"};
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.DialogLevelsStyle);
builder.setTitle("Hola mundo: Título.")
.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
Log.i("Dialog", "Op: " + items[item]);
}
});
dialogIcon = builder.create();
dialogIcon.show();
Diálogos de selección múltiple en Android
Ahora, si en vez de una opción en necesario que el usuario seleccione una o varias opciones, debemos emplear el método setMultiChoiceItems
:
final String[] items = {"Op 1", "Op 2", "Op 3"};
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.DialogLevelsStyle);
builder.setTitle("Hola mundo: Título.").setMultiChoiceItems(items, NULL,
new DialogInterface.OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog, int item, boolean isChecked) {
Log.i("Dialog", "Op: " + items[item]);
}
});
dialogIcon = builder.create();
dialogIcon.show();
Diálogo personalizados en Android
A través del método setView()
podemos definir un layout personalizado como si de otra Interfaz se tratase, de esta manera el diálogo se convierte en una poderosa herramienta para crear herramientas más complejas que requieran el bloqueo de la pantalla del usuario a través del diálogo:
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.DialogLevelsStyle);
LayoutInflater inflater = getLayoutInflater();
builder.setView(inflater.inflate(R.layout.list_audio_adapter, NULL))
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
dialogIcon = builder.create();
dialogIcon.show();
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter