1. 程式人生 > >【第三方開源專案】MD 風格的對話方塊 —— MaterialDialog

【第三方開源專案】MD 風格的對話方塊 —— MaterialDialog

定義:
MaterialDialog:一個漂亮、流暢、可定製的對話方塊。

依賴:

  • 核心模組的依賴:
compile 'com.afollestad.material-dialogs:core:0.9.6.0'

核心模組包含該庫的所有主要類,包括 MaterialDialog。 您可以使用核心建立基本、列表、單/多選項、進度、輸入等對話方塊。

  • 公共模組的依賴:
compile 'com.afollestad.material-dialogs:commons:0.9.6.0'

公共模組包含不是每個人都需要的擴充套件庫。 這包括 ColorChooserDialog、FolderChooserDialog、Material Preference 類和 MaterialSimpleListAdapter / MaterialSimpleListItem。

使用:

  1. 基本對話方塊:Basic Dialog
             new MaterialDialog.Builder(this)// 初始化建造者
                               .title(R.string.title)// 標題
                               .content(R.string.content)// 內容
                               .positiveText(R.string.agree)
                               .negativeText
(R.string.title) .show();// 顯示對話方塊

注意:Activity 中使用該功能需要 Activity 繼承 AppCompat 主題才能正確使用此庫。

2.關閉對話方塊:Dismissing Dialog
build():建立對話方塊
show():顯示對話方塊
dismiss():關閉對話方塊
類似 AlertDialog 的,有以下兩種方式獲得 MaterialDialog 的例項並顯示它。
方式一:

MaterialDialog dialog = new MaterialDialog.Builder
(this) .title(R.string.title)// 標題 .content(R.string.content)// 內容 .positiveText(R.string.agree) .show();// 顯示對話方塊

方式二:

MaterialDialog.Builder builder = new MaterialDialog.Builder(this)
              .title(R.string.title)// 標題
              .content(R.string.content)// 內容
              .positiveText(R.string.agree);
MaterialDialog dialog = builder.build();// 建立對話方塊
dialog.show();// 顯示對話方塊

3.顯示一個圖示:Dismissing Dialogs
圖示顯示在標題的左側。

new MaterialDialog.Builder(this)
              .title(R.string.title)// 標題
              .content(R.string.content)// 內容
              .positiveText(R.string.agree)
              .icon(R.drawable.icon) // 標題左側的圖示
              .show();// 顯示對話方塊

還可以使用 limitIconToDefaultSize()、maxIconSize(int size)、maxIconSizeRes(int sizeRes) 這些方法來限制圖示的最大大小。

4.疊放行動按鈕:Stacked Action Buttons
如果你有多個操作按鈕一起太寬而無法放在一行上,對話方塊會將這些按鈕疊放在垂直方向。
疊放行為在 Builder 中定義,一共有三種疊放行為,分別是

  • StackingBehavior.ALWAYS:總是垂直疊放
  • StackingBehavior.ADAPTIVE:自適應,如果他們需要適合的對話方塊,則動作按鈕將垂直疊放
  • StackingBehavior.NEVER:從不疊放
new MaterialDialog.Builder(this)
              .title(R.string.title)// 標題
              .content(R.string.content)// 內容
              .positiveText(R.string.long_positive)
              .negativeText(R.string.negative)
              .stackingBehavior(StackingBehavior.ADAPTIVE) // 預設值:自適應
              .show();// 顯示對話方塊

5.中性行動按鈕:Neutral Action Button
除了正面和負面文字之外,還可以指定中性文字,它會顯示最左邊的中立動作。

new MaterialDialog.Builder(this)
                .title("裝置列表")// 標題
                .content("content")// 內容
                .positiveText(R.string.long_positive)
                .negativeText(R.string.negative)
                .neutralText(R.string.more_info)
                .show();// 顯示對話方塊

6.回撥:Callbacks
從版本 0.8.2.0 開始,callback() Builder 方法已被棄用,以支援下面討論的各個回撥方法。 早期版本仍然需要使用 ButtonCallback。

new MaterialDialog.Builder(this)
    .onPositive(new MaterialDialog.SingleButtonCallback() {
        @Override
        public void onClick(MaterialDialog dialog, DialogAction which) {
            // TODO
        }
    })
    .onNeutral(new MaterialDialog.SingleButtonCallback() {
        @Override
        public void onClick(MaterialDialog dialog, DialogAction which) {
            // TODO
        }
    })
    .onNegative(new MaterialDialog.SingleButtonCallback() {
        @Override
        public void onClick(MaterialDialog dialog, DialogAction which) {
            // TODO
        }
    })
    .onAny(new MaterialDialog.SingleButtonCallback() {// 此方法可以監聽所有三個動作按鈕
        @Override
        public void onClick(MaterialDialog dialog, DialogAction which) {
            if (DialogAction.POSITIVE == which) {
                            // TODO:
            } else if (DialogAction.NEGATIVE == which) {
                            // TODO:
            } else if (DialogAction.NEUTRAL == which) {
                            // TODO:
            }
        }
    });

注意:如果 autoDismiss 關閉,則必須在這些回撥中手動關閉對話方塊。自動關閉預設開啟。

7.複選框提示:CheckBox Prompts
複選框提示可以顯示類似於 Android 用來請求 API 23+ 許可權的 UI。
注意:也可以在列表對話方塊和輸入對話方塊中使用複選框提示。

new MaterialDialog.Builder(this)
                .iconRes(R.drawable.ic_default_icon)// 標題左側的圖示
                .limitIconToDefaultSize()// 標題左側圖示的最大值
                .title("title6")// 標題
                .positiveText("Allow")
                .negativeText("Deny")
                .onAny(new MaterialDialog.SingleButtonCallback() {
                    @Override
                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                        Toast.makeText(TestActivity.this, "Prompt checked ? " + dialog.isPromptCheckBoxChecked(),
                                Toast.LENGTH_SHORT).show();
                    }
                })
                .checkBoxPromptRes(R.string.app_name, false, null)
                .show();// 顯示對話方塊

8.列表對話方塊:List Dialogs

String[] items = {"A", "BB", "CCC", "DDDD", "EEEEE"};
new MaterialDialog.Builder(this)
                .title("title7")// 標題
                .items(items)// 列表資料
                .itemsCallback(new MaterialDialog.ListCallback() {
                    @Override
                    public void onSelection(MaterialDialog dialog, View itemView, int position, CharSequence text) {
                        Toast.makeText(TestActivity.this, "position = " + position + " , text = " + text, Toast.LENGTH_SHORT).show();
                    }
                })
                .show();// 顯示對話方塊

注意:如果 autoDismiss 關閉,則必須手動關閉回撥中的對話方塊,自動關閉預設開啟。你可以將 positiveText() 或其他操作按鈕傳遞給構建器以強制它顯示列表下方的操作按鈕,但是這僅在某些特定情況下有用。

9.單選列表對話方塊:Single Choice List Dialogs
單選列表對話方塊與常規列表對話方塊幾乎相同,唯一的區別是使用 itemsCallbackSingleChoice 設定回撥而不是 itemsCallback,這表示對話方塊顯示列表項旁邊的單選按鈕。

String[] items = {"A", "BB", "CCC", "DDDD", "EEEEE"};
new MaterialDialog.Builder(this)
                .title("title8")// 標題
                .items(items)// 列表資料
                // itemsCallbackSingleChoice 方法中的第一個引數代表預選項的索引值,沒有預選項這個值就設定為 -1,有預選項就傳入一個預選項的索引值即可。
                // 如果不使用自定義介面卡,則可以使用 MaterialDialog 例項上的 setSelectedIndex(int) 更新選定的索引值。
                .itemsCallbackSingleChoice(1, new MaterialDialog.ListCallbackSingleChoice() {
                    @Override
                    public boolean onSelection(MaterialDialog dialog, View itemView, int which, CharSequence text) {
                        // 如果使用 alwaysCallSingleChoiceCallback() 方法,在這邊返回 false 將不允許新選擇的單選按鈕被選中。
                        return true;
                    }
                })
                // 如果沒有使用 positiveText() 設定正面操作按鈕,則當用戶按下正面操作按鈕時,
                // 對話方塊將自動呼叫單一選擇回撥方法,該對話方塊也將自行關閉,除非關閉自動關閉。
                .positiveText("Choose")
                // 如果呼叫 alwaysCallSingleChoiceCallback() 該方法,則每次使用者選擇/取消專案時都會呼叫單選回撥方法。
                .alwaysCallSingleChoiceCallback()
                .show();// 顯示對話方塊

10.顏色單選按鈕:Coloring Radio Buttons
像“動作”按鈕和“材質”對話方塊中的許多其他元素一樣,您可以自定義對話方塊單選按鈕的顏色。 Builder類包含一個widgetColor(),widgetColorRes(),widgetColorAttr()和choiceWidgetColor()方法。 他們的名字和引數註釋使他們自我解釋。
widgetColor是影響其他UI元素的相同顏色。 choiceWidgetColor特定於單個和多個選擇對話方塊,它僅影響單選按鈕和複選框。 您提供了一個ColorStateList,而不是用於生成ColorStateList的單一顏色。
請注意,預設情況下,單選按鈕將使用ColorAccent(用於AppCompat)或android:colorAccent(用於Material主題)中的顏色在活動主題中著色。
本自述檔案的全域性主題部分中還有一個全域性主題屬性:md_widget_color。

11.多選列表對話方塊:Multi Choice List Dialogs
多選列表對話方塊與常規列表對話方塊幾乎相同,唯一的區別是使用 itemsCallbackMultiChoice 設定回撥而不是 itemsCallback,這表示對話方塊顯示列表項旁邊的複選框,並且回撥可以返回多個選擇。

String[] items = {"A", "BB", "CCC", "DDDD", "EEEEE"};
new MaterialDialog.Builder(this)
                .title("title")// 標題
                .items(items)// 列表資料
                // itemsCallbackMultiChoice 方法中的第一個引數代表預選項的值,沒有預選項這個值就設定為 null,有預選項就傳入一組預選項的索引值即可。
                .itemsCallbackMultiChoice(null, new MaterialDialog.ListCallbackMultiChoice() {
                    @Override
                    public boolean onSelection(MaterialDialog dialog, Integer[] which, CharSequence[] text) {
                        // 如果使用 alwaysCallMultiChoiceCallback() 方法,在這邊返回 false 將不允許新選擇的單選按鈕被選中。
                        return true;
                    }
                })
                // 如果沒有使用 positiveText() 設定正面操作按鈕,則當用戶按下正面操作按鈕時,
                // 對話方塊將自動呼叫多項選擇回撥方法,該對話方塊也將自行關閉,除非關閉自動關閉。
                .positiveText("Choose")
                // 如果呼叫 alwaysCallMultiChoiceCallback() 該方法,則每次使用者選擇/取消專案時都會呼叫多項選擇回撥方法。
                .alwaysCallMultiChoiceCallback()
                .show();// 顯示對話方塊

12.顏色複選框:Coloring Check Boxes
像“動作”按鈕和“材質”對話方塊中的許多其他元素一樣,您可以自定義對話方塊複選框的顏色。 Builder類包含一個widgetColor(),widgetColorRes(),widgetColorAttr()和choiceWidgetColor()方法。 他們的名字和引數註釋使他們自我解釋。
widgetColor是影響其他UI元素的相同顏色。 choiceWidgetColor特定於單個和多個選擇對話方塊,它僅影響單選按鈕和複選框。 您提供了一個ColorStateList,而不是用於生成ColorStateList的單一顏色。
請注意,預設情況下,單選按鈕將使用ColorAccent(用於AppCompat)或android:colorAccent(用於Material主題)中的顏色在活動主題中著色。
本自述檔案的全域性主題部分中還有一個全域性主題屬性:md_widget_color。

13.為列表專案檢視分配標識
如果需要通過 ID 而不是索引來跟蹤列表專案,則可以從整數陣列中分配專案 ID,還可以傳遞一個文字整數陣列(int [])來代替陣列資源 ID。

String[] items = {"A", "BB", "CCC", "DDDD", "EEEEE"};
int[] ids = {0, 1, 2, 3, 4};
new MaterialDialog.Builder(this)
                .title("title")// 標題
                .items(items)// 列表資料
                .itemsIds(ids)// 列表 ID
                .itemsCallback(new MaterialDialog.ListCallback() {
                    @Override
                    public void onSelection(MaterialDialog dialog, View itemView, int position, CharSequence text) {
                        Toast.makeText(TestActivity.this, "position = " + position + " , text = " + text
                                + " , ID = " + itemView.getId(), Toast.LENGTH_SHORT).show();
                    }
                })
                .show();// 顯示對話方塊

14.自定義列表對話方塊:Custom List Dialogs
與 Android 的對話方塊類似,你可以通過 .adapter() 傳遞自己的介面卡來自定義列表的工作方式。

String[] items = {"A", "BB", "CCC", "DDDD", "EEEEE"};
new MaterialDialog.Builder(this)
                .title("title")// 標題
                // adapter 方法中第一個引數表示自定義介面卡,該介面卡必須繼承 RecyclerView.Adapter
                // 第二個引數表示佈局管理器,如果不需要設定就為 null,可選擇的值只有線性佈局管理器(LinearLayoutManager)
                // 和網格佈局管理器(GridLayoutManager)兩種
                .adapter(new ButtonItemAdapter(this, items), null)
                .show();// 顯示對話方塊

    /**
     * 自定義介面卡
     */
    private class ButtonItemAdapter extends RecyclerView.Adapter {

        private Context mContext;
        private String[] items = null;

        ButtonItemAdapter(Context mContext, String[] items) {
            this.mContext = mContext;
            this.items = items;
        }

        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            // TODO
            return null;
        }

        @Override
        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
            // TODO
        }

        @Override
        public int getItemCount() {
            return items.length;
        }
    }

注意:對於較新的版本,MaterialDialog 不再支援 ListView 和 ListAdapter,都改成使用 RecycleView了。還有自定義介面卡中必須要自行處理專案的點選事件。

MaterialDialog dialog = new MaterialDialog.Builder(this)
                 ...
                .build();
RecyclerView list = dialog.getRecyclerView();
// Do something with it.
dialog.show();

15.自定義檢視:Custom Views

boolean wrapInScrollView = true;
new MaterialDialog.Builder(this)
                .title("title")// 標題
                // 自定義檢視,引數一表示自定義檢視的佈局,引數二表示是否將自定義檢視放置在 ScrollView 中,
                // 這允許使用者根據需要滾動自定義檢視(小螢幕、長內容等)。但是,有些情況下不需要使用這種行為,
                // 這些情況主要包括在自定義佈局中包含 ScrollView、ListViews、RecycleViews、WebViews、GridViews 等
                // wrapInScrollView 該值為 true 時,自定義檢視會自動填充它。
                .customView(R.layout.activity_login, wrapInScrollView)
                .positiveText("Positive")
                .show();// 顯示對話方塊

16.以後訪問:Later Access
如果需要在構建對話方塊後訪問自定義檢視中的檢視,則可以使用 MaterialDialog 的 getCustomView() 獲得自定義檢視的物件。如果將佈局資源傳給 Builder,則對話方塊會處理佈局的初始化工作。

MaterialDialog dialog = // ... initialization via the builder ...
View view = dialog.getCustomView();// 獲取對話方塊中的自定義檢視物件

17.字型:Typefaces

new MaterialDialog.Builder(this)
                .title("title")// 標題
                .content("content")// 內容
                .typeface("Roboto.ttf", "Roboto-Light.ttf")// 字型
                .show();// 顯示對話方塊

修改字型呼叫 Builder 中的 .typeface(String, String) 方法即可,其中字型時從 assets/font 中提取的。這個方法還將通過 TypefaceHelper 處理迴圈字型,可以在自己的專案中使用該字型以避免重複分配。原始字型變數不會被回收,每次呼叫都會再次分配該字型。還有一個全域性主題屬性可用於自動將字型應用於應用程式中的每一個 MaterialDialog 中。

18.獲取和設定操作按鈕:Getting and Setting Action Buttons
獲取對話方塊的操作按鈕:

MaterialDialog dialog = // ... initialization via the builder ...
View positive = dialog.getActionButton(DialogAction.POSITIVE);
View negative = dialog.getActionButton(DialogAction.NEGATIVE);
View neutral = dialog.getActionButton(DialogAction.NEUTRAL);

更新對話方塊操作按鈕的標題:

MaterialDialog dialog = // ... initialization via the builder ...
dialog.setActionButton(DialogAction.NEGATIVE, "New Title");

19.主題化:Theming
在 Lollipop 之前,如果不使用反射和自定義繪圖,主題化 AlertDialogs 基本上是不可能的,自從 KitKat 之後,Android 變得更加色彩中性,但 AlertDialogs 繼續使用 Holo Blue 作為標題和標題分隔符,除了動作按鈕,Lollipop 還有更多的改進,預設對話方塊中沒有顏色,但是 MaterialDialog 使得主題化更容易。

20.基本:Basics
預設情況下,MaterialDialog 將基於從建立對話方塊的上下文中檢索 ?android:textColorPrimary 屬性中應用淺色主題或深色主題。也可以使用全域性主題屬性來設定。

new MaterialDialog.Builder(this)
                .title("title")// 標題
                .content("content")// 內容
                .theme(Theme.DARK)// 主題
                .show();// 顯示對話方塊

21.顏色:Colors
使用該專案建立的對話方塊幾乎所有方面都可以被著色。

new MaterialDialog.Builder(this)
                .title("title")// 標題
                .titleColorRes(R.color.pager_title_1)// 標題顏色
                .content("content")// 內容
                .contentColor(Color.BLUE)// 內容顏色
                .linkColorAttr(R.attr.civ_fill_color)
                .dividerColorRes(R.color.pager_title_2)// 分割線顏色
                .backgroundColorRes(R.color.interact_color_press)// 背景顏色
                .positiveText("Positive")
                .positiveColorRes(R.color.pager_title_1)
                .negativeText("Negative")
                .negativeColorRes(R.color.pager_title_2)
                .neutralText("Neutral")
                .neutralColorRes(R.color.pager_title_3)
                .widgetColorRes(R.color.pager_title_1)// 適用於進度條、複選框和單選按鈕
                .buttonRippleColorRes(R.color.pager_title_2)
                .show();

注意:這些方法中的每一種都有三種方法可以直接設定顏色,分別是:
* .xxxColor(int color)
* .xxxColorAttr(int colorAttr)
* .xxxColorRes(int colorRes)

22.選擇器:Selectors
選擇器是可以在按下或放開時改變狀態的繪圖。

new MaterialDialog.Builder(this)
                // 設定所有操作按鈕的選擇器
                .btnSelector(R.drawable.custom_btn_selector)
                // 僅設定 Positive 這個操作按鈕的選擇器,這樣使得 Positive 這個操作按鈕與其他操作按鈕有不同的選擇器
                .btnSelector(R.drawable.custom_btn_selector_primary, DialogAction.POSITIVE)
                // 設定當按鈕疊放時使用的選擇器,可能是因為沒有足夠的控制元件將它們全部放在一行上,或者在 Builder 上使用 forceStacked(true)
                .btnSelectorStacked(R.drawable.custom_btn_selector_stacked)
                // 在不使用自定義介面卡時,listSelector 用於列表專案的選擇器
                .listSelector(R.drawable.custom_list_stackedbtn_selector)
                .show();// 顯示對話方塊

注意:與使用自定義操作按鈕選擇器相關的重要說明:確保你的選擇器可繪製的引用插入可繪製圖像就像預設的那樣——這對於正確的動作按鈕填充很重要。

23.位置:Gravity

new MaterialDialog.Builder(this)
                .title("title")// 標題
                .titleGravity(GravityEnum.CENTER)// 標題的位置
                .content("content")// 內容
                .contentGravity(GravityEnum.CENTER)// 內容的位置
                .positiveText("Positive")
                .negativeText("Negative")
                .neutralText("Neutral")
                .btnStackedGravity(GravityEnum.END)// 操作按鈕的位置
                .itemsGravity(GravityEnum.END)// 當你不使用介面卡時,列表項的位置
                .buttonsGravity(GravityEnum.END)
                .show();// 顯示對話方塊

對於 buttonsGravity 的位置表示如下所示:
這裡寫圖片描述

注意:如果沒有 Positive 按鈕,就用 Negative 代替,除了 CENTER。

25.全域性主題

<style name="MyAppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- 所有對話方塊預設主題為 Theme.Dark,並將其設定為 true -->
        <item name="md_dark_theme">true</item>
        <!-- 這個屬性將覆蓋暗色或淺色對話方塊的背景色,注意:如果在此處使用深色,應該將 md_dark_theme 設定為 true,這樣文字和選擇器才能可見 -->
        <item name="md_background_color">#37474F</item>
        <!-- 在所有對話方塊的標題旁邊新增一個圖示 -->
        <item name="md_icon">@mipmap/ic_launcher</item>
        <!-- 設定圖示的最大尺寸 -->
        <attr name="md_icon_max_size" format="dimension" />
        <!-- 將圖示設定為預設最大大小(48dp) -->
        <attr name="md_icon_limit_cion_to_default_size" format="boolean" />
        <!-- 預設情況下,標題文字的顏色是從系統屬性 ?android:textColorPrimary 得來的 -->
        <item name="md_title_color">#E91E63</item>
        <!-- 預設情況下,內容文字的顏色是從系統屬性 ?android:textColorSecondary 得來的 -->
        <item name="md_content_color">#9C27B0</item>
        <!-- 預設情況下,連結文字的顏色是 AppCompat 的 colorAccent 屬性或者 Material 主題的 android:colorAccent 屬性得來的 -->
        <item name="md_link_color">#673AB7</item>
        <!-- 預設情況下,positive 文字的顏色是 AppCompat 的 colorAccent 屬性或者 Material 主題的 android:colorAccent 屬性得來的 -->
        <item name="md_positive_color">#673AB7</item>
        <!-- 預設情況下,neutral 文字的顏色是 AppCompat 的 colorAccent 屬性或者 Material 主題的 android:colorAccent 屬性得來的 -->
        <item name="md_neutral_color">#673AB7</item>
        <!-- 預設情況下,negative 文字的顏色是 AppCompat 的 colorAccent 屬性或者 Material 主題的 android:colorAccent 屬性得來的 -->
        <item name="md_negative_color">#673AB7</item>
        <!-- 預設情況下,進度條、複選框和單選按鈕的顏色是 AppCompat 的 colorAccent 屬性或者 Material 主題的 android:colorAccent 屬性得來的 -->
        <item name="md_widget_color">#673AB7</item>
        <!-- 預設情況下,列表 item 的文字顏色在亮主題下為黑色,在暗主題下為白色 -->
        <item name="md_item_color">#9C27B0</item>
        <!-- 這個屬性將覆蓋當使用頂部和底部分割線時的顏色,內容是可滾動的 -->
        <item name="md_divider_color">#E1E63</item>
        <!-- 這個屬性將覆蓋操作按鈕上顯示波紋的顏色(在 Lollipop 及以上版本),預設情況下 屬性 colorControlHighlight 是來自 AppCompat 或者 Material 主題 -->
        <item name="md_btn_ripple_color">#E1E63</item>
        <!-- 這個屬性將覆蓋列表上使用的選擇器 -->
        <item name="md_list_selector">@drawable/selector</item>
        <!-- 這個屬性將覆蓋操作按鈕上使用的選擇器 -->
        <item name="md_btn_stacked_selector">@drawable/selector</item>
        <!-- 這個屬性將覆蓋 positive 操作按鈕上使用的背景選擇器 -->
        <item name="md_btn_positive_selector">@drawable/selector</item>
        <!-- 這個屬性將覆蓋 neutral 操作按鈕上使用的背景選擇器 -->
        <item name="md_btn_neutral_selector">@drawable/selector</item>
        <!-- 這個屬性將覆蓋 negative 操作按鈕上使用的背景選擇器 -->
        <item name="md_btn_negative_selector">@drawable/selector</item>
        <!-- 設定對話方塊標題文字的位置,預設為 start,可以是 start、center 和 end -->
        <item name="md_title_gravity">start</item>
        <!-- 設定對話方塊內容文字的位置,預設為 start,可以是 start、center 和 end -->
        <item name="md_content_gravity">start</item>
        <!-- 設定對話方塊列表項文字的位置(不包括自定義介面卡),預設為 start,可以是 start、center 和 end -->
        <item name="md_items_gravity">start</item>
        <!-- 設定對話方塊操作按鈕文字的位置,預設為 start,
         start:Neutral Negative Positive
         center:Negative Neutral Positive
         end:Positive Negative Neutral -->
        <item name="md_buttons_gravity">start</item>
        <!-- 設定對話方塊操作按鈕疊放文字的位置,預設為 end,可以是 start、center 和 end -->
        <item name="md_btnstacked_gravity">end</item>
        <!-- 設定標題和操作按鈕的字型(預設為 null) -->
        <item name="md_medium_font">Roboto-Medium.ttf</item>
        <!-- 設定其他地方的字型(預設為 null),比如內容和列表項等 -->
        <item name="md_regular_font">Roboto-Regular.ttf</item>
    </style>

26.顯示、取消和關閉的回撥:Show、Cancel and Dismiss Callbacks

new MaterialDialog.Builder(this)
                .title("Use Google's Location Services?")// 標題
                .content("Let Google help apps determine location. This means sending " +
                        "anonymous location data to Google, even when no apps are running.")// 內容
                .positiveText("Agree")
                .showListener(new DialogInterface.OnShowListener() {// 設定顯示監聽器
                    @Override
                    public void onShow(DialogInterface dialogInterface) {
                        Toast.makeText(TestActivity.this, "showListener", Toast.LENGTH_SHORT).show();
                    }
                })
                .cancelListener(new DialogInterface.OnCancelListener() {// 設定取消監聽器
                    @Override
                    public void onCancel(DialogInterface dialogInterface) {
                        Toast.makeText(TestActivity.this, "cancelListener", Toast.LENGTH_SHORT).show();
                    }
                })
                .dismissListener(new DialogInterface.OnDismissListener() {// 關閉對話方塊監聽器
                    @Override
                    public void onDismiss(DialogInterface dialogInterface) {
                        Toast.makeText(TestActivity.this, "dismissListener", Toast.LENGTH_SHORT).show();
                    }
                })
                // 在對話方塊之外禁用關閉對話方塊的功能,預設為 true 表示在對話方塊之外點選就關閉對話方塊,
                // 反之,該值為 false 時表示在對話方塊之外點選就禁用關閉對話方塊的功能
                .cancelable(true)
                .show();// 顯示對話方塊

27.輸入對話方塊:Input Dialogs

new MaterialDialog.Builder(this)
                .title("Input")// 標題
                .content("input content")// 內容
                .inputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD)// 輸入型別
                .input("input hint", "input prefill", new MaterialDialog.InputCallback() {
                    @Override
                    public void onInput(@NonNull MaterialDialog dialog, CharSequence input) {
                        Toast.makeText(TestActivity.this, "do something...", Toast.LENGTH_SHORT).show();
                    }
                })
                .show();// 顯示對話方塊

輸入對話方塊會自動處理對 EditText 的對焦餅顯示鍵盤以允許使用者立即輸入,當對話方塊關閉時,鍵盤將被自動解除。
注意:當按下輸入提交給回撥時,該對話方塊將強制顯示 positive 操作按鈕,另外,輸入型別是可選項,不一定非要設定。

28.帶顏色的 EditText:Coloring the EditText
可自定義輸入對話方塊中 EditText 的顏色,使用方法:widgetColor()、widgetColorRes()、widgetColorAttr()
注意:預設情況下,EditText 將使用 AppCompat 中的 colorAccent 屬性或者 Material 主題中的 android:colorAccent 屬性。
全域性屬性:md_widget_color。

29.限制輸入長度:Limiting Input Length

new MaterialDialog.Builder(this)
                .title("Input")// 標題
                .inputRangeRes(2, 20, R.color.pager_title_3)// 限制輸入範圍
                .input(null, null, new MaterialDialog.InputCallback() {
                            @Override
                            public void onInput(@NonNull MaterialDialog dialog, CharSequence input) {
                                Toast.makeText(TestActivity.this, "Do something...", Toast.LENGTH_SHORT).show();
                            }
                        }
                )
                .show();// 顯示對話方塊

30.自定義失效:Custom Invalidation
啟用或禁用 EditText 的最簡單方法是從 Builder 中呼叫 alwaysCallInputCallback() 方法,以便當使用者更改輸入時呼叫回撥函式,這個方法可以不斷檢查輸入的內容,如果決定不能提交,可以在回撥中使用它來禁用提交按鈕:

dialog.getActionButton(DialogAction.POSITIVE).setEnabled(false);

31.進度條對話方塊:Progress Dialogs
(1)不確定進度條對話方塊:

new MaterialDialog.Builder(this)
                .title("progress dialog")// 標題
                .content("please wait")// 內容
                .progress(true, 0)// 不確定進度條
                .show();// 顯示對話方塊

(2)確定進度條對話方塊(Seek Bar):

MaterialDialog dialog = new MaterialDialog.Builder(this)
                .title("progress dialog")// 標題
                .content("please wait")// 內容
                // 第一個引數表示是否是不確定的,該值為 true 表示是不確定進度條,反之為確定進度條
                // 第二個引數表示進度條的最大值
                // 第三個引數表示是否顯示百分比,如果該值為 true 表示顯示百分比,反之不顯示百分比
                .progress(false, 150, true)// 確定進度條
                .show();// 顯示對話方塊
        while (dialog.getCurrentProgress() != dialog.getMaxProgress()) {
            if (dialog.isCancelled()) {
                break;
            }
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            dialog.incrementProgress(1);
        }
        dialog.setContent("Done");

32.水平進度指示器的不確定進度條:Make an Indeterminate Dialog Horizontal
預設情況下,不確定進度條對話方塊將使用迴圈指示器,也可以用下面方法改為使用水平進度指示器。

new MaterialDialog.Builder(this)
                .title("progress dialog")// 標題
                .content("please wait")// 內容
                .progress(true, 0)// 不確定進度條
                .progressIndeterminateStyle(true)
                .show();// 顯示進度條

33.為進度條著色:Coloring the Progress Bar
可自定義輸入對話方塊中進度條的顏色,使用方法:widgetColor()、widgetColorRes()、widgetColorAttr()
注意:預設情況下,進度條將使用 AppCompat 中的 colorAccent 屬性或者 Material 主題中的 android:colorAccent 屬性。
全域性屬性:md_widget_color。

34.自定義編號和進度格式:Custom Number and Progress Formats

new MaterialDialog.Builder(this)
                .title("title")// 標題
                .content("content")// 內容
                .progress(false, 150, true)
                // 自定義編號
                .progressNumberFormat("01/50")
                // 自定義進度格式
                .progressPercentFormat(NumberFormat.getPercentInstance())
                .show();// 顯示進度條

35.著色助手:Tint Helper
MDTintHelp:動態地為複選框、單選項、編輯框、進度條著色,

36.顏色選擇器對話方塊:Color Choose Dialogs
~該部分是擴充套件功能,暫時未記錄~