Android之Material Dialogs詳解(非原創)


文章大綱

一、什么是Material Dialogs
二、Material Dialogs實戰
三、項目源碼下載

 

一、什么是Material Dialogs

  Material Dialogs是一個漂亮、流暢、可定制的對話框,核心模塊包含創建基本、列表、單/多選項、進度、輸入等對話框。

二、Material Dialogs實戰

使用注意點:
(1)使用MaterialDialog的Activity需要繼承AppCompat
(2)默認的MaterialDialog在點擊空白位置時候會自動關閉彈出框,取消dialog以外的區域的點擊事件代碼如下

//取消dialog以外的區域的點擊事件(默認為true)這里我們設置成false就ok啦 .canceledOnTouchOutside(false) 

1. 添加依賴

    //添加material-dialogs依賴 //核心模塊的依賴 implementation 'com.afollestad.material-dialogs:core:0.9.1.0' //公共模塊的依賴 //公共模塊包含不是每個人都需要的擴展庫。 這包括 ColorChooserDialog、FolderChooserDialog、Material Preference 類和 MaterialSimpleListAdapter / MaterialSimpleListItem implementation 'com.afollestad.material-dialogs:commons:0.9.1.0' 

2. 創建基本彈框

new MaterialDialog.Builder(MainActivity.this) .title("標題") .content("內容") .positiveText("確認") .negativeText("取消") .show(); 

運行結果如下:

 

 

溫馨提示:取消彈框采用dialog.dismiss();

3. 創建帶圖標彈框(包含兩個按鈕)

new MaterialDialog.Builder(MainActivity.this) .title("標題") .content("內容;測試長度測試長度測試長度測試長度測試長度測試長度測試長度測試長度測試長度測試長度測試長度測試長度測試長度測試長度測試長度測試長度測試長度測試長度") .positiveText("確認") .negativeText("取消") .icon(getResources().getDrawable(R.drawable.ic_launcher)) .show(); 

運行結果如下:

 

溫馨提示:可以用maxIconSize(int size)限制圖標最大size

4. 創建帶三個按鈕彈框

new MaterialDialog.Builder(MainActivity.this) .title("標題") .content("內容") .positiveText("確認") .negativeText("取消") .neutralText("更多") .show(); 

運行結果如下:

 

5. 創建帶點擊事件的彈出框

//如果你想監聽三種動作按鈕,只用一個onAny就行了,which會告訴你點擊了什么按鈕,根據需要去判斷,which.toString()的名字分別是Positive,Negative等 //new MaterialDialog.Builder(this) // .title("標題") // .content("內容") // .positiveText("確認") // .negativeText("取消") // .neutralText("更多") // .onAny(new MaterialDialog.SingleButtonCallback() { // @Override // public void onClick(MaterialDialog dialog, DialogAction which) { // Toast.makeText(MainActivity.this, which.toString(), Toast.LENGTH_SHORT).show(); // } // }) // .show(); click_button = (Button)findViewById(R.id.click_button); click_button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new MaterialDialog.Builder(MainActivity.this) .title("標題") .content("內容") .positiveText("確認") .negativeText("取消") .neutralText("更多") .onPositive(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(MaterialDialog dialog, DialogAction which) { Toast.makeText(MainActivity.this, "點擊了確認按鈕", Toast.LENGTH_SHORT).show(); } }) .onNeutral(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(MaterialDialog dialog, DialogAction which) { Toast.makeText(MainActivity.this, "點擊了更多按鈕", Toast.LENGTH_SHORT).show(); } }) .onNegative(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(MaterialDialog dialog, DialogAction which) { Toast.makeText(MainActivity.this, "點擊了取消按鈕", Toast.LENGTH_SHORT).show(); } }) .show(); } }); 

運行結果如下:

 
 

6. 創建是否不再詢問彈出框

new MaterialDialog.Builder(MainActivity.this) .title("標題") .content("內容") .positiveText("確認") //第二次參數代表初始狀態是否為勾選 .checkBoxPromptRes(R.string.isShowAgain, true, null) .onAny(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(MaterialDialog dialog, DialogAction which) { //dialog.isPromptCheckBoxChecked()+""如果返回true,表示用戶勾選了,false表示沒有 Toast.makeText(MainActivity.this, dialog.isPromptCheckBoxChecked()+"", Toast.LENGTH_SHORT).show(); } }) .show(); 

運行結果如下:

 

7. 創建不帶樣式列表單選框

final String[] array = {"aa","bb"}; new MaterialDialog.Builder(MainActivity.this) .title("標題") .positiveText("確認") .negativeText("取消") .items(array) .itemsCallback(new MaterialDialog.ListCallback() { @Override public void onSelection(MaterialDialog dialog, View view, int which, CharSequence text) { Toast.makeText(MainActivity.this, which+"", Toast.LENGTH_SHORT).show(); } }) .show(); 

運行結果如下:

 

 

8. 創建帶樣式的列表單選框

new MaterialDialog.Builder(MainActivity.this) .title("標題") .items(array) .itemsCallbackSingleChoice(-1, new MaterialDialog.ListCallbackSingleChoice() { @Override public boolean onSelection(MaterialDialog dialog, View view, int which, CharSequence text) { return true; } }) .show(); 

運行結果如下:

 

9. 創建多選列表

new MaterialDialog.Builder(MainActivity.this) .title("標題") .positiveText("確認") .items(array) .itemsCallbackMultiChoice(null, new MaterialDialog.ListCallbackMultiChoice() { @Override public boolean onSelection(MaterialDialog dialog, Integer[] which, CharSequence[] text) { return true; } }) .show(); 

運行結果如下:

 

10. 創建自定義視圖

new MaterialDialog.Builder(MainActivity.this) .title("Title") .customView(R.layout.activity_main, true) .positiveText("CHOOSE") .show(); 

運行結果如下:

 

11.創建帶限制的輸入框

new MaterialDialog.Builder(MainActivity.this) .title("Title") //限制輸入的長度 .inputRangeRes(2, 20, R.color.colorPrimary) //限制輸入類型 .inputType(InputType.TYPE_CLASS_PHONE) .input("哈哈哈", null, new MaterialDialog.InputCallback() { @Override public void onInput(MaterialDialog dialog, CharSequence input) { Toast.makeText(MainActivity.this, input, Toast.LENGTH_SHORT).show(); } }) .positiveText("確定") .show(); 

運行結果如下:

 

12. 創建等待提示框(圓圈加載)

new MaterialDialog.Builder(MainActivity.this) .title("提示框") .content("請稍等...") .progress(true, 0) .show(); 

運行結果如下:

 

13. 創建等待提示框(水平加載)

new MaterialDialog.Builder(MainActivity.this) .title("提示框") .content("請稍等...") .progress(true, 0) .progressIndeterminateStyle(true) .show(); 

運行結果如下:

 

14. 創建帶進度條的等待框

new MaterialDialog.Builder(MainActivity.this).title("Progress").content("please wait...").contentGravity(GravityEnum.CENTER).progress(false, 100, true).cancelListener(dialog -> { if (thread != null) { thread.interrupt(); } }).showListener(dialogInterface -> { final MaterialDialog dialog = (MaterialDialog) dialogInterface; startThread(() -> { while (dialog.getCurrentProgress() != dialog.getMaxProgress() && !Thread.currentThread().isInterrupted()) { if (dialog.isCancelled()) { break; } try { Thread.sleep(50); } catch (InterruptedException e) { break; } dialog.incrementProgress(1); } runOnUiThread(() -> { thread = null; dialog.setContent(getString(R.string.md_done_label)); }); }); }).show(); 

運行結果如下:

 
 

15.其他功能

(1)MaterialDialog可以通過以下方式設置顏色

// .titleColorRes(R.color.material_red_500) // .contentColor(Color.WHITE) // notice no 'res' postfix for literal color // .linkColorAttr(R.attr.my_link_color_attr) // notice attr is used instead of none or res for attribute resolving // .dividerColorRes(R.color.material_pink_500) // .backgroundColorRes(R.color.material_blue_grey_800) // .positiveColorRes(R.color.material_red_500) // .neutralColorRes(R.color.material_red_500) // .negativeColorRes(R.color.material_red_500) // .widgetColorRes(R.color.material_red_500) // .buttonRippleColorRes(R.color.material_red_500) 

(2)通過以下方式設置MaterialDialog主題

.theme(Theme.DARK) 

(3)設置文字、按鈕等內容的位置

        .titleGravity(GravityEnum.CENTER) .contentGravity(GravityEnum.CENTER) .btnStackedGravity(GravityEnum.START) .itemsGravity(GravityEnum.END) .buttonsGravity(GravityEnum.END) 

(4)改變drawable被點擊或聚焦時的狀態

        .btnSelector(R.drawable.custom_btn_selector) .btnSelector(R.drawable.custom_btn_selector_primary, DialogAction.POSITIVE) .btnSelectorStacked(R.drawable.custom_btn_selector_stacked) .listSelector(R.drawable.custom_list_and_stackedbtn_selector)! 

三、項目源碼下載

鏈接:https://pan.baidu.com/s/1dJFaw1xfvaOiI8XGPwwaRg
密碼:sfd8


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM