Confirmation dialogs

Según la documentación de Google sobre Material Design

Los dialog de confirmación requieren que los usuarios explícitamente confirmen su elección antes de enviar una acción. Por ejemplo, los usuarios podrián escuchar diversos tonos de llamadas en un dialog pero solo podrán enviar una única seleción final pulsando el botón "OK".

Presionando tanto el botón "Cancelar" como el botón de navegación "Back", se cancela la acción, se descarta cualquier cambio y se cierra el dialog.

¿Cómo se añade?

I. En tu archivo build.gradle añade la última version de la librería appcompat.

dependencies {  
    compile 'com.android.support:appcompat-v7:X.X.X' 
    // X.X.X especifica la versión
}

II. Haz que tu activity extienda de android.support.v7.app.AppCompatActivity.

public class MainActivity extends AppCompatActivity {  
    ...
}

III. Para crear el dialog android.support.v7.app.AlertDialog.Builder.

Dialog de una sola acción

Para crear un dialog con una sola acción utiliza el método setSingleChoiceItems en tu objeto builder.

public void showDialog() {  
    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
    builder.setTitle(R.string.dialog_title);

    // Lista de elementos
    String[] items = getResources().getStringArray(R.array.ringtone_list);
    builder.setSingleChoiceItems(items, 0,
            new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // Acción para el elemento seleccionado
        }
    });

    String positiveText = getString(android.R.string.ok);
    builder.setPositiveButton(positiveText,
            new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // Acción positiva
        }
    });

    String negativeText = getString(android.R.string.cancel);
    builder.setNegativeButton(negativeText, 
            new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // Acción negativa
        }
    });

    AlertDialog dialog = builder.create();
    // display dialog
    dialog.show();
}
Dialog de múltiple elección

Para crear un dialog con una lista de la cuál pueden ser seleccionados varios elementos, utiliza el método setMultiChoiceItems en tu objeto builder.

...
builder.setMultiChoiceItems(items, selectedItemsArray,  
        new DialogInterface.OnMultiChoiceClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which, boolean isChecked) {
        // Lógica de elemento seleccionado
    }
});
...

How to style

I. Declara un drawable.xml personalizado para el fondo del dialog.

<?xml version="1.0" encoding="utf-8"?>  
<!-- From: support/v7/appcompat/res/drawable/abc_dialog_material_background_light.xml -->  
<inset xmlns:android="http://schemas.android.com/apk/res/android"  
    android:insetLeft="16dp"
    android:insetTop="16dp"
    android:insetRight="16dp"
    android:insetBottom="16dp">

    <shape android:shape="rectangle">
        <corners android:radius="2dp" />
        <solid android:color="@color/indigo" />
    </shape>

</inset>  

II. Declara estos estilos personalizados en tu archivo de estilos styles.xml.

<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">  
    <!--item RadioButton or CheckBox color-->
    <item name="colorControlNormal">@android:color/white</item>
    <item name="colorControlActivated">@color/pink</item>
    <!--item text color-->
    <item name="textColorAlertDialogListItem">@android:color/white</item>
    <!--buttons color-->
    <item name="colorAccent">@color/pink</item>
    <!--title and message color-->
    <item name="android:textColorPrimary">@android:color/white</item>
    <!--dialog background-->
    <item name="android:windowBackground">@drawable/background_dialog</item>
</style>  

III. Crea tu dialog y añade tu estilo como parámetro en el constructor de AlertDialog.Builder.

AlertDialog.Builder builder =  
        new AlertDialog.Builder(this, R.style.MyDialogTheme);
...
AlertDialog dialog = builder.create();  
// Muestra el dialogo
dialog.show();  

Escrito originalmente por Volodymyr Yatsykiv en MaterialDoc