-
Notifications
You must be signed in to change notification settings - Fork 2.7k
QMUIDialog
chanthuang edited this page Feb 25, 2019
·
7 revisions
QMUIDialog
提供了一系列常用的对话框,解决了系统默认对话框在不同 Android 版本上的表现不一致的问题。
QMUIDialog
一般使用 QMUIDialogBuilder
及其子类来创建。
各种类型的 Builder 都应该继承 QMUIDialogBuilder
,该类提供一些通用的方法。
-
主要方法
方法名 | 描述 |
---|---|
setTitle(String title) | 设置对话框的标题 |
hasTitle() | 返回对话框是否拥有标题 |
setCanceledOnTouchOutside(boolean canceledOnTouchOutside) | 设置点击 Dialog 外部时是否关闭 Dialog |
setOnDecorationListener(QMUIDialogView.OnDecorationListener onDecorationListener) | 设置 Dialog 的 View 的 onDraw() 与 dispatchDraw() 回调 |
addAction(QMUIDialogAction action) | 添加按钮 |
addAction(CharSequence str, QMUIDialogAction.ActionListener listener) | 添加按钮和点击事件 |
setActionContainerOrientation(int actionContainerOrientation) | 设置按钮区域的排列方向(QMUIDialogBuilder.HORIZONTAL / QMUIDialogBuilder.VERTICAL ) |
setChangeAlphaForPressOrDisable(boolean changeAlphaForPressOrDisable) | 设置点击按钮时、按钮不可点时是否要改变透明度 |
setActionDivider(int thickness, int colorRes, int startInset, int endInset) | 设置按钮之前的分割线宽度、颜色、起始位置缩进、结束位置缩进 |
show() | 生成一个 QMUIDialog,并显示出来 |
create() | 生成一个 QMUIDialog,但不显示出来 |
create(int style) | 根据 style 样式生成一个 QMUIDialog,但不显示出来 |
- 自定义 Builder 时可继承的方法
方法名 | 描述 |
---|---|
onConfigTitleView(TextView titleView) | 对标题(TextView ) 进行自定义修改,在标题 View 创建之后调用 |
onCreateContent(QMUIDialog dialog, ViewGroup parent, Context context) | 创建标题以下、按钮以上部分的 View,并添加到 parent 中 |
onAfter(QMUIDialog dialog, LinearLayout parent, Context context) | 对 Dialog 进行整体自定义修改,在 Dialog 的 View 创建完毕、未显示出来之前调用 |
QMUIDialog
的按钮由 QMUIDialogAction
类负责构建,并可自定义样式。
-
主要方法
方法名 | 描述 |
---|---|
setOnClickListener(ActionListener onClickListener) | 设置点击事件 |
setEnabled(boolean enabled) | 设置是否可点击 |
buildActionView(QMUIDialog dialog, int index) | 构造 QMUIButton 作为对话框按钮 |
QMUI 提供了几种常见的对话框 Builder。
-
类:
QMUIDialog.MessageDialogBuilder
-
主要方法
方法名 | 描述 |
---|---|
setMessage(CharSequence message) | 设置对话框的提示语 |
- 使用示例:
new QMUIDialog.MessageDialogBuilder(getActivity())
.setTitle("标题")
.setMessage("确定要发送吗?")
.addAction("取消", new QMUIDialogAction.ActionListener() {
@Override
public void onClick(QMUIDialog dialog, int index) {
dialog.dismiss();
}
})
.addAction("确定", new QMUIDialogAction.ActionListener() {
@Override
public void onClick(QMUIDialog dialog, int index) {
dialog.dismiss();
}
})
.show();
-
类:
QMUIDialog.CheckBoxMessageDialogBuilder
' -
主要方法
方法名 | 描述 |
---|---|
setMessage(CharSequence message) | 设置对话框的提示语 |
setChecked(boolean checked) | 设置 CheckBox 勾选状态 |
isChecked() | 获取 CheckBox 是否被勾选 |
使用示例:
new QMUIDialog.CheckBoxMessageDialogBuilder(getActivity())
.setTitle("退出后是否删除账号信息?")
.setMessage("删除账号信息")
.setChecked(true)
.addAction("取消", new QMUIDialogAction.ActionListener() {
@Override
public void onClick(QMUIDialog dialog, int index) {
dialog.dismiss();
}
})
.addAction("退出", new QMUIDialogAction.ActionListener() {
@Override
public void onClick(QMUIDialog dialog, int index) {
dialog.dismiss();
}
})
.show();
-
类:
QMUIDialog.EditTextDialogBuilder
' -
主要方法
方法名 | 描述 |
---|---|
setPlaceholder(String placeholder) | 设置输入框的 placeholder |
setDefaultText(CharSequence defaultText) | 设置输入框的默认文字 |
setInputType(int inputType) | 设置 EditText 的 inputType |
使用示例:
final QMUIDialog.EditTextDialogBuilder builder = new QMUIDialog.EditTextDialogBuilder(getActivity());
builder.setTitle("标题")
.setPlaceholder("在此输入您的昵称")
.setInputType(InputType.TYPE_CLASS_TEXT)
.addAction("取消", new QMUIDialogAction.ActionListener() {
@Override
public void onClick(QMUIDialog dialog, int index) {
dialog.dismiss();
}
})
.addAction("确定", new QMUIDialogAction.ActionListener() {
@Override
public void onClick(QMUIDialog dialog, int index) {
CharSequence text = builder.getEditText().getText();
if (text != null && text.length() > 0) {
Toast.makeText(getActivity(), "您的昵称: " + text, Toast.LENGTH_SHORT).show();
dialog.dismiss();
} else {
Toast.makeText(getActivity(), "请填入昵称", Toast.LENGTH_SHORT).show();
}
}
})
.show();
-
类:
QMUIDialog.MenuDialogBuilder
' -
主要方法
方法名 | 描述 |
---|---|
addItems(CharSequence[] items, OnClickListener listener) | 添加多个菜单项和点击事件 |
addItem(CharSequence item, OnClickListener listener) | 添加单个菜单项和点击事件 |
使用示例:
final String[] items = new String[]{"选项1", "选项2", "选项3"};
new QMUIDialog.MenuDialogBuilder(getActivity())
.addItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getActivity(), "你选择了 " + items[which], Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
})
.show();
-
类:
QMUIDialog.CheckableDialogBuilder
' -
主要方法
方法名 | 描述 |
---|---|
addItems(CharSequence[] items, OnClickListener listener) | 添加多个菜单项和点击事件 |
addItem(CharSequence item, OnClickListener listener) | 添加单个菜单项和点击事件 |
setCheckedIndex(int checkedIndex) | 设置选中的菜单项的下标 |
getCheckedIndex() | 获取选中项的下标 |
使用示例:
final String[] items = new String[]{"选项1", "选项2", "选项3"};
final QMUIDialog.CheckableDialogBuilder builder = new QMUIDialog.CheckableDialogBuilder(getActivity());
builder.setTitle("请选择")
.setCheckedIndex(1)
.addItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
builder.setCheckedIndex(which);
}
})
.addAction("确定", new QMUIDialogAction.ActionListener() {
@Override
public void onClick(QMUIDialog dialog, int index) {
Toast.makeText(getActivity(), "你选择了 " + items[builder.getCheckedIndex()], Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
})
.show();
-
类:
QMUIDialog.MultiCheckableDialogBuilder
' -
主要方法
方法名 | 描述 |
---|---|
addItems(CharSequence[] items, OnClickListener listener) | 添加多个菜单项和点击事件 |
addItem(CharSequence item, OnClickListener listener) | 添加单个菜单项和点击事件 |
setCheckedItems(int checkedItems) | 设置被选中的菜单项下标(用 int 二进制中为1的位来表示该选项被选中) |
setCheckedItems(int[] checkedIndexes) | 设置被选中的菜单项下标数组(用数组的每一位来表示被选中项的下标) |
getCheckedItemRecord() | 获取选中项的下标(用 int 二进制中为1的位来表示该选项被选中) |
getCheckedItemIndexes() | 获取选中项的下标数组(用数组的每一位来表示被选中项的下标) |
使用示例:
final String[] items = new String[]{"选项1", "选项2", "选项3", "选项4", "选项5", "选项6"};
final QMUIDialog.MultiCheckableDialogBuilder builder = new QMUIDialog.MultiCheckableDialogBuilder(getActivity())
.setCheckedItems(new int[]{1, 3})
.addItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.addAction("取消", new QMUIDialogAction.ActionListener() {
@Override
public void onClick(QMUIDialog dialog, int index) {
dialog.dismiss();
}
});
builder.addAction("提交", new QMUIDialogAction.ActionListener() {
@Override
public void onClick(QMUIDialog dialog, int index) {
String result = "你选择了 ";
for (int i = 0; i < builder.getCheckedItemIndexes().length; i++) {
result += "" + builder.getCheckedItemIndexes()[i] + "; ";
}
Toast.makeText(getActivity(), result, Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
});
builder.show();
-
类:
QMUIDialog.CustomDialogBuilder
-
主要方法
方法名 | 描述 |
---|---|
setLayout(int layoutResId) | 设置自定义 layout |
通过在 App 的 theme 中覆盖样式属性可在全局范围内配置 QMUIDialog 的样式,如:
<!-- 在 App 的 theme 中添加 -->
<item name="qmui_dialog_bg">@drawable/your_dialog_bg</item>
支持的属性如下:
属性名 | 描述 |
---|---|
qmui_dialog_min_width | Dialog 最小宽度 |
qmui_dialog_max_width | Dialog 最大宽度 |
qmui_dialog_bg | Dialog 的背景 Drawable |
qmui_dialog_radius | Dialog 的圆角大小 |
qmui_dialog_margin_vertical | Dialog 的上下最小间距 |
qmui_dialog_padding_horizontal | Dialog 的左右内间距 |
qmui_dialog_background_dim_amount | Dialog 的底层遮罩不透明度 |
qmui_dialog_wrapper_style | Dialog 的容器 View 样式 |
qmui_dialog_title_style | Dialog 的标题 View 样式 |
qmui_dialog_action_container_style | Dialog 的按钮区域容器 View 样式 |
qmui_dialog_action_style | Dialog 的按钮 View 样式 |
qmui_dialog_message_content_style |
MessageDialogBuilder 创建出的 Dialog 中的消息 View 的样式 |
qmui_dialog_edit_content_style |
EditTextDialogBuilder 创建出的 Dialog 中的输入框 View 的样式 |
qmui_dialog_menu_container_style |
MenuDialogBuilder 创建出的 Dialog 中的选项容器 View 的样式 |
qmui_dialog_menu_item_style |
MenuDialogBuilder 创建出的 Dialog 中的选项 View 的样式 |