文章大綱 一、什麼是Material Dialogs二、Material Dialogs實戰三、項目源碼下載 一、什麼是Material Dialogs Material Dialogs是一個漂亮、流暢、可定製的對話框,核心模塊包含創建基本、列表、單/多選項、進度、輸入等對話框。 二、Materia ...
文章大綱
一、什麼是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