Los diálogos (dialogs) en Android

- Andrés Cruz

In english

Los diálogos (dialogs) en Android

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:

  1. La clase AlertDialog para mostrar u ocultar el diálogo.
  2. La clase AlertDialog.Builder para establecer mensajes (.setMessage()), título (setTitle()), layout (setView()), estilo, botones (setNegativeButton() y setPositiveButton() y setCancelable()), 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:

Diálogo simple de mensaje en Android

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álogo de confirmación en Android

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 en Android

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 simple con radio en Android

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álogos de selección múltiple en Android

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();
Diálogo personalizados en Android
Andrés Cruz

Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter

Andrés Cruz En Udemy

Acepto recibir anuncios de interes sobre este Blog.