Android对话框组件。包括提示性对话框、确认对话框、输入对话框、菜单型对话框、单选、多选对话框、带进度条的对话框、loading对话框、以及自定义对话框等。
Material Dialog
遵循谷歌Material Design设计风格的对话框,api与系统同步,对不同尺寸的设备以及系统版本做了兼容。
- 简单的提示性对话框

1. new MaterialDialog.Builder(getContext())
2. .iconRes(R.drawable.icon_tip)
3. .title(R.string.tip_infos)
4. .content(R.string.content_simple_confirm_dialog)
5. .positiveText(R.string.lab_submit)
6. .show();
8. //使用DialogLoader可自由切换dialog显示的策略
9. DialogLoader.getInstance().showTipDialog(...);
- 简单的确认对话框

1. new MaterialDialog.Builder(getContext())
2. .content(R.string.tip_bluetooth_permission)
3. .positiveText(R.string.lab_yes)
4. .negativeText(R.string.lab_no)
5. .show();
7. //使用DialogLoader可自由切换dialog显示的策略
8. DialogLoader.getInstance().showConfirmDialog(...);
- 简单带输入的对话框

1. new MaterialDialog.Builder(getContext())
2. .iconRes(R.drawable.icon_warning)
3. .title(R.string.tip_warning)
4. .content(R.string.content_warning)
5. .inputType(
6. InputType.TYPE_CLASS_TEXT
7. | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
8. | InputType.TYPE_TEXT_FLAG_CAP_WORDS)
9. .input(
10. getString(R.string.hint_please_input_password),
11. "",
12. false,
13. ((dialog, input) -> Toast(input.toString())))
14. .inputRange(3, 5)
15. .positiveText(R.string.lab_continue)
16. .negativeText(R.string.lab_change)
17. .onPositive(((dialog, which) -> Toast("你输入了:" + dialog.getInputEditText().getText().toString())))
18. .cancelable(false)
19. .show();
21. //使用DialogLoader可自由切换dialog显示的策略
22. DialogLoader.getInstance().showInputDialog(...);
- 菜单型对话框

1. new MaterialDialog.Builder(getContext())
2. .title(R.string.tip_options)
3. .items(R.array.menu_values)
4. .itemsCallback((dialog, view, which, text) -> Toast(which + ": " + text))
5. .show();
7. //使用DialogLoader可自由切换dialog显示的策略
8. DialogLoader.getInstance().showContextMenuDialog(...);
- 单选对话框

1. new MaterialDialog.Builder(getContext())
2. .title(R.string.tip_capture_setting)
3. .items(R.array.lead_name_choice_entry)
4. .itemsCallbackSingleChoice(
5. 0,
6. (dialog, view, which, text) -> {
7. Toast(which + ": " + text);
8. return true; // allow selection
9. })
10. .positiveText(R.string.lab_choice)
11. .negativeText(R.string.lab_cancel)
12. .show();
14. //使用DialogLoader可自由切换dialog显示的策略
15. DialogLoader.getInstance().showSingleChoiceDialog(...);
- 多选对话框

1. new MaterialDialog.Builder(getContext())
2. .title(R.string.tip_capture_setting)
3. .items(R.array.lead_name_choice_entry)
4. .itemsCallbackMultiChoice(
5. new Integer[]{0, 1},
6. (dialog, which, text) -> {
7. StringBuilder sb = new StringBuilder("选中:\n");
8. for (int i = 0; i < which.length; i ++){
9. sb.append(which[i]).append(":").append(text[i]).append("\n");
10. }
11. Toast(sb.toString());
12. return true; // allow selection
13. })
14. .positiveText(R.string.lab_choice)
15. .negativeText(R.string.lab_cancel)
16. .show();
- 水平有进度的进度条对话框

1. new MaterialDialog.Builder(getContext())
2. .title(R.string.tip_update)
3. .content(R.string.content_downloading)
4. .contentGravity(GravityEnum.CENTER)
5. .progress(false, 150, true)
6. .cancelListener(
7. dialog -> {
8. if (thread != null) {
9. thread.interrupt();
10. }
11. })
12. .showListener(
13. dialogInterface -> {
14. updateProgress((MaterialDialog) dialogInterface);
15. })
16. .negativeText(R.string.lab_cancel)
17. .show();
- 环形无进度的进度条对话框

1. new MaterialDialog.Builder(getContext())
2. .iconRes(R.drawable.icon_sex_man)
3. .limitIconToDefaultSize()
4. .title(R.string.tip_patient_name)
5. .content(R.string.content_wait_for_receive_data)
6. .progress(true, 0)
7. .progressIndeterminateStyle(false)
8. .negativeText(R.string.lab_cancel)
9. .show();
- 带图标条目的Dialog

1. List<MaterialSimpleListItem> list = new ArrayList<>();
2. list.add(new MaterialSimpleListItem.Builder(getContext())
3. .content(R.string.lab_edit)
4. .icon(R.drawable.icon_edit)
5. .iconPaddingDp(8)
6. .build());
7. list.add(new MaterialSimpleListItem.Builder(getContext())
8. .content(R.string.lab_add)
9. .icon(R.drawable.icon_add)
10. .build());
11. list.add(new MaterialSimpleListItem.Builder(getContext())
12. .content(R.string.lab_delete)
13. .icon(R.drawable.icon_delete)
14. .build());
15. list.add(new MaterialSimpleListItem.Builder(getContext())
16. .content(R.string.lab_update)
17. .icon(R.drawable.icon_update)
18. .iconPaddingDp(8)
19. .build());
20. final MaterialSimpleListAdapter adapter = new MaterialSimpleListAdapter(list)
21. .setOnItemClickListener(new MaterialSimpleListAdapter.OnItemClickListener() {
22. @Override
23. public void onMaterialListItemSelected(MaterialDialog dialog, int index, MaterialSimpleListItem item) {
24. ToastUtils.toast(item.getContent().toString());
25. }
26. });
27. new MaterialDialog.Builder(getContext()).adapter(adapter, null).show();
- 自定义对话框

1. new MaterialDialog.Builder(getContext())
2. .customView(R.layout.dialog_custom, true)
3. .title("自定义对话框")
4. .positiveText(R.string.lab_submit)
5. .negativeText(R.string.lab_cancel)
6. .show();
8. //或者继承CustomMaterialDialog实现
常用方法
- 设置标题:title(CharSequence title)
- 设置标题的对齐方式: titleGravity(GravityEnum gravity)
- 设置标题字体的颜色:titleColor(int color)
- 设置对话框的图标:icon(Drawable icon)
- 设置对话框的内容:content(CharSequence content)
- 设置对话框内容的文字颜色:contentColor(int color)
- 设置对话框内容的对齐方式:contentGravity(GravityEnum gravity)
- 设置对话框列表内容的集合:items(Collection collection)
- 设置对话框列表的点击回调:itemsCallback(ListCallback callback)
- 设置对话框列表的长按点击回调:itemsLongCallback( ListLongCallback callback)
- 设置对话框列表字体的颜色:itemsColor(int color)
- 设置对话框列表单选监听:itemsCallbackSingleChoice(int selectedIndex, ListCallbackSingleChoice callback)
- 设置对话框列表多选监听:itemsCallbackMultiChoice(Integer[] selectedIndices, ListCallbackMultiChoice callback)
- 设置确定按钮的文字:positiveText(CharSequence message)
- 设置确定按钮的点击回调:onPositive(SingleButtonCallback callback)
- 设置确定按钮文字的颜色:positiveColor(int color)
- 设置中性按钮的文字:neutralText(CharSequence message)
- 设置中性按钮的点击回调:onNeutral(SingleButtonCallback callback)
- 设置否定按钮的文字:negativeText(CharSequence message)
- 设置否定按钮的点击回调:onNegative(SingleButtonCallback callback)
- 设置对话框列表的点击效果 :listSelector(int selectorRes)
- 设置按钮的点击效果 :btnSelector(int selectorRes)
- 设置对话框自定义布局:customView(int layoutRes, boolean wrapInScrollView)
- 设置对话框进度条:progress(boolean indeterminate, int max)
- 设置对话框点击外部是否可消失:cancelable(boolean cancelable)
- 设置对话框的显示监听:showListener(OnShowListener listener)
- 设置对话框的消失监听:dismissListener(OnDismissListener listener)
- 设置对话框的取消监听:cancelListener(OnCancelListener listener)
- 设置对话框输入框的样式:input( CharSequence hint, CharSequence prefill, boolean allowEmptyInput, InputCallback callback)
DialogLoader
对话框加载者,可自定义对话框的加载策略。框架默认提供了两套加载策略:
AlertDialogStrategy和MaterialDialogStrategy。 默认使用的是MaterialDialogStrategy。
设置加载的策略
1. DialogLoader.getInstance().setIDialogStrategy(...);
策略方法
- 显示简要的提示对话框:showTipDialog
- 显示简要的确认对话框:showConfirmDialog
- 显示带输入框的对话框:showInputDialog
- 显示类似上下文菜单的对话框:showContextMenuDialog
- 显示带单选项的对话框:showSingleChoiceDialog
BottomSheet
底部弹出对话框,支持List和Grid两种形式。
List形式

1. new BottomSheet.BottomListSheetBuilder(getActivity())
2. .addItem("Item 1")
3. .addItem("Item 2")
4. .addItem("Item 3")
5. .setOnSheetItemClickListener(new BottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() {
6. @Override
7. public void onClick(BottomSheet dialog, View itemView, int position, String tag) {
8. dialog.dismiss();
9. ToastUtils.toast("Item " + (position + 1));
10. }
11. })
12. .build()
13. .show();
Grid形式

1. BottomSheet.BottomGridSheetBuilder builder = new BottomSheet.BottomGridSheetBuilder(getActivity());
2. builder
3. .addItem(R.drawable.icon_more_operation_share_friend, "分享到微信", TAG_SHARE_WECHAT_FRIEND, BottomSheet.BottomGridSheetBuilder.FIRST_LINE)
4. .addItem(R.drawable.icon_more_operation_share_moment, "分享到朋友圈", TAG_SHARE_WECHAT_MOMENT, BottomSheet.BottomGridSheetBuilder.FIRST_LINE)
5. .addItem(R.drawable.icon_more_operation_share_weibo, "分享到微博", TAG_SHARE_WEIBO, BottomSheet.BottomGridSheetBuilder.FIRST_LINE)
6. .addItem(R.drawable.icon_more_operation_share_chat, "分享到私信", TAG_SHARE_CHAT, BottomSheet.BottomGridSheetBuilder.FIRST_LINE)
7. .addItem(R.drawable.icon_more_operation_save, "保存到本地", TAG_SHARE_LOCAL, BottomSheet.BottomGridSheetBuilder.SECOND_LINE)
8. .setOnSheetItemClickListener(new BottomSheet.BottomGridSheetBuilder.OnSheetItemClickListener() {
9. @Override
10. public void onClick(BottomSheet dialog, BottomSheetItemView itemView) {
11. dialog.dismiss();
12. int tag = (int) itemView.getTag();
13. ToastUtils.toast("tag:" + tag + ", content:" + itemView.toString());
14. }
15. }).build().show();
LoadingDialog
自定义的loading对话框,支持更新提示信息,修改图标配置,旋转速度等。
- 演示效果

- 使用案例
1. mLoadingDialog = WidgetUtils.getLoadingDialog(getContext())
2. .setIconScale(0.4F)
3. .setLoadingSpeed(8);
常用方法
- 更新提示信息:updateMessage(String tipMessage)
- 修改图标配置:setLoadingIcon(Drawable icon)
- 资源回收:Recycle()
- 设置loading旋转的速度:setLoadingSpeed(int speed)
MiniLoadingDialog
自定义的loading对话框,类似IOS的loading加载框,支持更新提示信息。
- 演示效果

- 使用案例
1. mMiniLoadingDialog = WidgetUtils.getMiniLoadingDialog(getContext());
