# Dialogs [Dialogs](https://material.io/components/dialogs/) inform users about a task and can contain critical information, require decisions, or involve multiple tasks. !["Dialog to confirm settings centered in a screen"](assets/dialogs/dialogs_hero.png) **Contents** * [Design & API documentation](#design-api-documentation) * [Using dialogs](#using-dialogs) * [Basic dialog](#basic-dialog) * [Full-screen dialog](#full-screen-dialog) * [Theming](#theming-dialogs) ## Design & API Documentation * [Google Material3 Spec](https://material.io/components/date-pickers/overview) * [API reference](https://developer.android.com/reference/com/google/android/material/dialog/package-summary) ## Using dialogs Before you can use Material dialogs, you need to add a dependency to the Material Components for Android library. For more information, go to the [Getting started](https://github.com/material-components/material-components-android/tree/master/docs/getting-started.md) page. ```kt MaterialAlertDialogBuilder(context) // Add customization options here .show() ``` ### Making dialogs accessible The contents within a dialog should follow their own accessibility guidelines, such as an icon on a title having a content description via the `android:contentDescription` attribute set in the `MaterialAlertDialog.Material3.Title.Icon` style or descendant. ### Types There are two types of dialogs: 1\. [Basic dialog](#basic-dialog), 2\. [Full-screen dialog](#full-screen-dialog) ![Examples of the two types of dialogs.](assets/dialogs/dialogs_types.png) ## Dialogs A dialog is a type of modal window that appears in front of app content to provide critical information or ask for a decision. Dialogs disable all app functionality when they appear, and remain on screen until confirmed, dismissed, or a required action has been taken. Dialogs are purposefully interruptive, so they should be used sparingly. ### Dialog examples API and source code: * `MaterialAlertDialogBuilder` * [Class description](https://developer.android.com/reference/com/google/android/material/dialog/MaterialAlertDialogBuilder) * [Class source](https://github.com/material-components/material-components-android/tree/master/lib/java/com/google/android/material/dialog/MaterialAlertDialogBuilder.java) ## Basic dialog The following example shows a basic dialog. !["Dialog with title, and text and purple buttons to cancel, decline or accept"](assets/dialogs/dialogs_basic.png) In code: ```kt MaterialAlertDialogBuilder(context) .setTitle(resources.getString(R.string.title)) .setMessage(resources.getString(R.string.supporting_text)) .setNeutralButton(resources.getString(R.string.cancel)) { dialog, which -> // Respond to neutral button press } .setNegativeButton(resources.getString(R.string.decline)) { dialog, which -> // Respond to negative button press } .setPositiveButton(resources.getString(R.string.accept)) { dialog, which -> // Respond to positive button press } .show() ``` ## Full-screen dialog Full-screen dialogs group a series of tasks, such as creating a calendar entry with the event title, date, location, and time. Because they take up the entire screen, full-screen dialogs are the only dialogs over which other dialogs can appear. There is no specific Material implementation of a full-screen dialog. You can implement it by using a [`DialogFragment`](https://developer.android.com/reference/androidx/fragment/app/DialogFragment) as explained in the [Android Developer guides](https://developer.android.com/guide/topics/ui/dialogs#FullscreenDialog). ### Anatomy and key properties A dialog has a container, content (either supporting text or a set of items of a particular type), a background scrim, and, optionally, title and buttons. ![anatomy](assets/dialogs/dialogs_anatomy.png) 1. Container 2. Icon (optional) 3. Title (optional) 4. Content 5. Buttons (optional) 6. Scrim #### Container attributes Element | **Attribute** | **Related methods** | **Default value** ----------------------------------- | -------------------------------------------------------- | ------------------------------------------------------ | ----------------- **Color** | `app:backgroundTint` | N/A | `?attr/colorSurfaceContainerHigh` **Shape** | `app:shapeAppearance`
`app:shapeAppearanceOverlay` | N/A | `?attr/shapeAppearanceCornerExtraLarge` **Background inset start and end** | `app:backgroundInsetStart`
`app:backgroundInsetEnd` | `setBackgroundInsetStart`
`setBackgroundInsetEnd` | `24dp` **Background inset top and bottom** | `app:backgroundInsetTop`
`app:backgroundInsetBottom` | `setBackgroundInsetTop`
`setBackgroundInsetBottom` | `80dp` #### Title attributes Element | **Attribute** | **Related methods** | **Default value** -------------- | ------------------------ | -------------------------------- | ----------------- **Text label** | N/A | `setTitle`
`setCustomTitle` | `null` **Text color** | `android:textColor` | N/A | `?attr/colorOnSurface` **Typography** | `android:textAppearance` | N/A | `?attr/textAppearanceHeadlineSmall` **Icon** | N/A | `setIcon`
`setIconAttribute` | `null` **Icon tint** | `app:tint` | N/A | `?attr/colorSecondary` #### Content attributes **Supporting text** Element | **Attribute** | **Related methods** | **Default value** -------------- | ------------------------ | ------------------- | ----------------- **Text** | N/A | `setMessage` | `null` **Color** | `android:textColor` | N/A | `?attr/colorOnSurfaceVariant` **Typography** | `android:textAppearance` | N/A | `?attr/textAppearanceBodyMedium` **List item** Element | **Attribute** | **Related methods** | **Default value** --------------------------------------- | ------------------------------ | ---------------------- | ----------------- **List item layout** | `app:listItemLayout` | `setItems` | [`@layout/mtrl_alert_select_dialog_item`](https://github.com/material-components/material-components-android/tree/master/lib/java/com/google/android/material/dialog/res/layout/mtrl_alert_select_dialog_item.xml) **List item layout style** | N/A | N/A | `?attr/materialAlertDialogBodyTextStyle` **List item text color** | `android:textColor` | N/A | `?attr/colorOnSurfaceVariant` **List item typography** | `android:textAppearance` | N/A | `?attr/textAppearanceBodyMedium` **Multi choice item layout** | `app:multiChoiceItemLayout` | `setMultiChoiceItems` | [`@layout/mtrl_alert_select_dialog_multichoice`](https://github.com/material-components/material-components-android/tree/master/lib/java/com/google/android/material/dialog/res/layout/mtrl_alert_select_dialog_multichoice.xml) **Single choice item layout** | `app:singleChoiceItemLayout` | `setSingleChoiceItems` | [`@layout/mtrl_alert_select_dialog_singlechoice`](https://github.com/material-components/material-components-android/tree/master/lib/java/com/google/android/material/dialog/res/layout/mtrl_alert_select_dialog_singlechoice.xml) **Multi/single choice item style** | `android:checkedTextViewStyle` | N/A | `@style/Widget.Material3.CheckedTextView` **Multi/single choice item text color** | `android:textColor` | N/A | `?attr/colorOnSurfaceVariant` **Multi/single choice item typography** | `android:textAppearance` | N/A | `?attr/textAppearanceBodyLarge` **Note:** You can set any custom view to be the content of your dialog via the `setView` method. #### Buttons attributes Element | **Attribute** | **Related methods** | **Default value** ------------------------------------------------ | --------------------------------- | ------------------- | ----------------- **Buttons theme attributes (negative/positive)** | `app:buttonBar*ButtonStyle` | N/A | `@style/Widget.Material3.Button.TextButton.Dialog` **Buttons theme attributes (neutral)** | `app:buttonBarNeutralButtonStyle` | N/A | `@style/Widget.Material3.Button.TextButton.Dialog.Flush` **Buttons (neutral/negative/positive)** | N/A | `set*Button` | `null` **Icons** | N/A | `set*ButtonIcon` | `null` For specific button attributes, see the [Buttons documentation](https://github.com/material-components/material-components-android/tree/master/docs/components/Button.md). #### Scrim attributes Element | **Attribute** | **Related methods** | **Default value** -------------- | ----------------------------- | ------------------- | ----------------- **Dim amount** | `android:backgroundDimAmount` | N/A | 32% #### Theme overlays Element | **Theme overlay** -------------------------- | ----------------- **Default theme overlay** | `ThemeOverlay.Material3.MaterialAlertDialog` **Centered theme overlay** | `ThemeOverlay.Material3.MaterialAlertDialog.Centered` Default theme overlay attribute: `?attr/materialAlertDialogTheme` #### Theme attributes Element | **Theme attribute** | **Default value** ------------------------- | ----------------------------------------- | ----------------- **Default style** | `?attr/alertDialogStyle` | `@style/MaterialAlertDialog.Material3` **Title text style** | `?attr/materialAlertDialogTitleTextStyle` | `@style/MaterialAlertDialog.Material3.Title.Text` **Supporting text style** | `?attr/materialAlertDialogBodyTextStyle` | `@style/MaterialAlertDialog.Material3.Body.Text` See full list of [styles](https://github.com/material-components/material-components-android/tree/master/lib/java/com/google/android/material/dialog/res/values/styles.xml), [attributes](https://github.com/material-components/material-components-android/tree/master/lib/java/com/google/android/material/dialog/res/values/attrs.xml), and [theme overlays](https://github.com/material-components/material-components-android/tree/master/lib/java/com/google/android/material/dialog/res/values/themes.xml). ## Theming dialogs A dialog supports [Material Theming](https://material.io/components/dialogs/#theming) which can customize color, typography and shape. ### Dialog theming example API and source code: * `MaterialAlertDialogBuilder` * [Class description](https://developer.android.com/reference/com/google/android/material/dialog/MaterialAlertDialogBuilder) * [Class source](https://github.com/material-components/material-components-android/tree/master/lib/java/com/google/android/material/dialog/MaterialAlertDialogBuilder.java) The following example shows a dialog with Material Theming. ![Dialog with title and text buttons in brown and selected radio button in pink](assets/dialogs/dialogs_theming.png) #### Implementing dialog theming Setting the theme attribute `materialAlertDialogTheme` to your custom `ThemeOverlay` will affect all dialogs. In `res/values/themes.xml`: ```xml ``` In `res/values/styles.xml`: ```xml ``` Or if you want to change only one specific dialog, pass the `themeResId` to the constructor: ```kt MaterialAlertDialogBuilder(context, R.style.ThemeOverlay_App_MaterialAlertDialog) ... .show() ```