Creare le finestre di Dialog – Lezione 22 di Android

Andorid mette a disposizione un gran numero di dialog predefiniti facilmente utilizzabili tramite il DialogFragment

Una finestra di dialogo è una piccola finestra che consente all’utente di prendere una decisione o di inserire delle informazioni. La classe generica Android che consente di utilizzare le finestre di dialogo si chiama Dialog ma è sconsigliato istanziare direttamente questa classe ma di utilizzare una sottoclasse come:

  • AlertDialog: consente di mostrare un titolo, dei bottoni, una lista di elementi selezionabili oppure utilizzare un layout personalizzato;
  • DatePickerDialog e TimePickerDialog: questi dialog consentono di utilizzare delle interfacce grafiche che consentono all’utente di selezionare una data o un orario;
  • ProgressDialog: consente di visualizzare una finestra di dialogo con una barra di progresso.

Per poter utilizzare queste classi è consigliato utilizzare un DialogFragment come contenitore, questa classe offre una serie di metodo per creare e maneggiare i dialog. La classe DialogFragment è stata introdotta in Android 3.0 (API level 11), per questo motivo è consigliato utilizzare la libreria di supporto importando la classe android.support.v4.app.DialogFragment e non android.app.DialogFragment.

Creare un dialog tramite un DialogFragment

Un AlertDialog è suddiviso in tre sezioni:

  • Titolo: si tratta di un campo opzionale, in genere si utilizza quando nel dialog vi è un messaggio molto grande, una lista o un layout personalizzato;
  • Contenuto: consente di mostrare un messaggio, una lista o un layout personalizzato;
  • Bottoni: vengono utilizzati per mostrare un massimo di 3 bottoni per consente all’utente una scelta.

Android Dialog

Android Dialog

Android Dialog

Estendendo la classe DialogFragment è possibile creare nel suo metodo onCreateDialog() il nostro dialog, ad esempio un AlertDialog.

  public class MyDialogFragment extends DialogFragment {
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Utilizza la classe Builder per costruire un dialog
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        // Settiamo un messaggio e i bottoni
        builder.setMessage(R.string.dialog_fire_missiles)
          .setPositiveButton(R.string.fire, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
              // L'utente ha cliccato sul pulsante per attivare una funzionalità
            }
          })
          .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
              // L'utente ha chiuso la finestra di dialogo
            }
          });
        // Crea e restituisce un AlertDialog
        return builder.create();
    }
  }

La classe AlertDialog.Builder consente di creare un dialog tramite il metodo AlertDialog.Builder(). E’ possibile settare il titolo e il messaggio di un AlertDialog tramite i metodi setMessage() e setTitle(), mentre per settare le callback dei bottoni si utilizzano i metodi setPositiveButton(), setNeutralButton() e setNegativeButton(). Infine, per ottenere l’istanza della finestra di dialogo creata si utilizza il metodo create() e verrà visualizzato tramite il metodo show().

Creare un dialog personalizzato

In Android è possibile utilizzare delle finestre di dialogo con un layout personalizzato aggiungendo tramite il metodo setView(). Per creare un layout in res/layout/ si definisce la sua struttura in XML>, ad esempio:

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <ImageView
        android:src="@drawable/header_logo"
        android:layout_width="match_parent"
        android:layout_height="64dp"
        android:scaleType="center"
        android:background="#FFFFBB33"
        android:contentDescription="@string/app_name" />
    <EditText
        android:id="@+id/username"
        android:inputType="textEmailAddress"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="4dp"
        android:layout_marginBottom="4dp"
        android:hint="@string/username" />
  </LinearLayout>

Per settare il layout personalizzato, nel metodo onCreateDialog(), scriveremo:

  // Recuperare l'inflater del layout
  LayoutInflater inflater = getActivity().getLayoutInflater();

  // Settiamo il layout del dialog passandogli null al parent
  builder.setView(inflater.inflate(R.layout.my_dialog, null))

Per mostrare un dialog dobbiamo istanziare il nostro DialogFrament e richiamare il metodo show() (passando come secondo argomento un tag univoco che il sistema usa per salvare e ripristinare lo stato del fragment quando necessario):

  public void confirmFireMissiles() {
    DialogFragment myDialogFragment = new MyDialogFragment();
    myDialogFragment.show(getSupportFragmentManager(), "missiles");
  }

Android Dialog

Infine, Android di occupa di chiudere una finestra di dialogo quando un utente clicca sul bottone “negative“, su un elemento della lista, ecc. Altrimenti è possibile chiudere un dialog tramite il metodo dismiss() sul DialogFragment. Il metodo cancel() è utilizzato per indicare che l’utente ha deciso di non effettuare nessuna scelta del dialog e l’ha abbandonato.

Per maggiori informazioni è possibile consultare la guida ufficiale di Android in inglese.

Indice Lezione PrecedenteLezione Successiva

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *