MaterialDialog 对话框增强扩展

MaterialDialog 扩展为 MIT App Inventor 提供增强的对话框与 Toast 功能。支持创建自定义对话框、底部面板(Bottom Sheet)、全屏 WebView 对话框,以及视图点击事件、抽屉菜单、日期/时间/列表选择器等高级交互功能。
代码块预览:

动态效果预览:

属性
- LongLength 长时长
- Toast 长时长的常量值,值为
1。在调用ShowToast时作为时长参数传入。 - ShortLength 短时长
- Toast 短时长的常量值,值为
0。在调用ShowToast时作为时长参数传入。 - WrapContent 自动换行
- 控制 Toast 内容是否自动换行。设置为
true则自动换行,设置为false则不换行。在调用ShowToast之前设置,以控制 Toast 的布局方式。
事件
- OnButtonClick 按钮点击时(dialogId,buttonType)
- 当标题对话框(
CreateTitleDialog创建)的按钮被点击时触发。dialogId:被点击按钮所在对话框的唯一标识符。buttonType:被点击的按钮类型,值为"positive"(确认)、"negative"(取消)或"neutral"(中性)。
- OnDismiss 对话框关闭时(dialogId)
- 当对话框被关闭(dismiss)时触发此事件。可在此执行清理操作或更新界面。
dialogId:被关闭的对话框的唯一标识符。
- OnShow 对话框显示时(dialogId)
- 当对话框变为可见状态时触发。适合在对话框显示后立即执行某些操作。
dialogId:被显示的对话框的唯一标识符。
- OnCreateDialogError 创建对话框出错时(errorMessage)
- 当对话框创建过程中发生错误时触发。应始终处理此事件以捕获并响应创建错误。
errorMessage:错误描述信息。
- OnBottomSheetDismissed 底部面板关闭时(dialogId)
- 当底部面板(Bottom Sheet)被关闭时触发。可在此更新应用状态。
dialogId:被关闭的底部面板的唯一标识符。
- AfterPageLoaded 页面加载完成时(dialogId,url)
- 当 WebView 对话框中的页面加载完成后触发。
dialogId:包含 WebView 的对话框的唯一标识符。url:已加载完成的页面 URL。
- AfterEvaluation JS执行完成时(dialogId,result)
- 当在 WebView 对话框中执行 JavaScript 代码后触发,返回执行结果。
dialogId:包含 WebView 的对话框的唯一标识符。result:JavaScript 代码的执行结果。
- ViewClicked 视图被点击时(viewId)
- 当通过
MakeWholeViewClickable设置为可点击的视图被点击时触发。viewId:被点击视图的唯一标识符。
- ViewLongClicked 视图被长按时(viewId)
- 当通过
MakeWholeViewClickable设置为可长按的视图被长按时触发。viewId:被长按视图的唯一标识符。
- OnDatePicked 日期选择完成时(dialogId,year,month,day)
- 当用户在日期选择对话框中选定日期后触发。
dialogId:日期选择对话框的唯一标识符。year:选中的年份。month:选中的月份。day:选中的日期。
- OnTimePicked 时间选择完成时(dialogId,hour,minute)
- 当用户在时间选择对话框中选定时间后触发。
dialogId:时间选择对话框的唯一标识符。hour:选中的小时。minute:选中的分钟。
- OnItemSelected 列表项选择时(dialogId,item,index)
- 当用户在列表对话框中选择某一项时触发。
dialogId:列表对话框的唯一标识符。item:被选中项的文本内容。index:被选中项在列表中的索引(从 0 开始)。
方法
自定义对话框
- CreateDialogFromView 从视图创建对话框(dialogId,androidViewComponent,cancelable,animationType,paddingDp)
- 使用已有的 AndroidViewComponent(布局组件)创建自定义对话框。
dialogId:对话框的唯一标识符。androidViewComponent:作为对话框内容的视图组件,请在调用前确保已正确配置该组件的布局。cancelable:是否允许点击对话框外部区域将其关闭。animationType:对话框出现/消失的动画类型(整数)。paddingDp:对话框内容周围的内边距(单位:dp)。
效果预览:

代码示例:

MaterialDialog1.CreateDialogFromView("myDialog", VerticalArrangement1, true, 1, 10) - CreateTitleDialog 创建标题对话框(dialogId,title,message,positiveButtonText,negativeButtonText,neutralButtonText,cancelableOnTouchOutside,isIndeterminateProgress,rgbColor)
- 创建一个包含标题、消息文本和最多三个按钮的标准对话框。按钮点击后触发
OnButtonClick事件。dialogId:对话框的唯一标识符。title:对话框标题。message:对话框消息内容。positiveButtonText:确认按钮文字(可为空)。negativeButtonText:取消按钮文字(可为空)。neutralButtonText:中性按钮文字(可为空)。cancelableOnTouchOutside:是否允许点击外部区域关闭对话框。isIndeterminateProgress:是否显示不确定进度条。rgbColor:RGB 颜色字符串(当前版本暂未使用,可传空字符串)。
效果预览:

MaterialDialog1.CreateTitleDialog("myDialog", "确认操作", "您确定要继续吗?", "是", "否", "取消", true, false, "") - Show 显示对话框(dialogId)
- 显示已创建的对话框。请确保在调用此方法前已通过
CreateDialogFromView或CreateTitleDialog创建了对应对话框。dialogId:要显示的对话框的唯一标识符。
MaterialDialog1.Show("myDialog") - Dismiss 关闭对话框(dialogId)
- 以编程方式关闭当前正在显示的对话框。
dialogId:要关闭的对话框的唯一标识符。
MaterialDialog1.Dismiss("myDialog") - DeleteDialog 删除对话框(dialogId)
- 从内存中移除对话框,若对话框正在显示则同时将其关闭。对于不再需要的对话框,请及时调用此方法以释放内存。
dialogId:要删除的对话框的唯一标识符。
MaterialDialog1.DeleteDialog("myDialog")
Toast 提示
- ShowToast 显示自定义Toast(androidViewComponent,duration)
- 使用 AndroidViewComponent 作为内容显示自定义 Toast 提示,支持比纯文字 Toast 更复杂的布局。
androidViewComponent:作为 Toast 内容的视图组件。duration:显示时长,使用ShortLength(短时,值为 0)或LongLength(长时,值为 1)。
效果预览:

MaterialDialog1.ShowToast(Label1, MaterialDialog1.LongLength)
底部面板(Bottom Sheet)
- CreateBottomSheet 创建底部面板(dialogId,contentLayout,cancelable)
- 创建一个底部面板(Bottom Sheet)对话框,适合在不离开当前屏幕的情况下展示附加信息或操作。
dialogId:底部面板的唯一标识符。contentLayout:作为底部面板内容的布局组件(建议使用垂直布局,不推荐使用卡片视图)。cancelable:是否允许点击外部区域关闭底部面板。
效果预览:

MaterialDialog1.CreateBottomSheet("myBottomSheet", VerticalArrangement1, true) - ShowBottomSheet 显示底部面板(dialogId)
- 显示已创建的底部面板。请确保调用前已创建对应底部面板。
dialogId:要显示的底部面板的唯一标识符。
MaterialDialog1.ShowBottomSheet("myBottomSheet") - DismissBottomSheet 关闭底部面板(dialogId)
- 以编程方式关闭底部面板。
dialogId:要关闭的底部面板的唯一标识符。
MaterialDialog1.DismissBottomSheet("myBottomSheet")
WebView 对话框
- CreateWebViewDialog 创建WebView对话框(dialogId,url,cancelable,animationType,userAgent)
- 创建一个全屏 WebView 对话框,用于在对话框中加载和显示网页。页面加载完成后触发
AfterPageLoaded事件。请确保 URL 格式正确且可访问。dialogId:对话框的唯一标识符。url:WebView 中要加载的网页地址。cancelable:是否允许点击外部区域关闭对话框。animationType:对话框动画类型(整数)。userAgent:自定义 UserAgent 字符串(可为空)。
MaterialDialog1.CreateWebViewDialog("webDialog", "https://www.example.com", true, 1, "") - EvaluateJSInDialogWebView 在WebView中执行JS(dialogId,jsCode)
- 在 WebView 对话框中执行 JavaScript 代码。执行完成后触发
AfterEvaluation事件并返回执行结果。请勿使用用户输入直接拼接 JS 代码,以防注入风险。dialogId:包含 WebView 的对话框的唯一标识符。jsCode:要执行的 JavaScript 代码字符串。
MaterialDialog1.EvaluateJSInDialogWebView("webDialog", "document.getElementById('myElement').innerHTML")
视图点击
- MakeWholeViewClickable 设置视图可点击(viewComponent,viewId,clickable,longClickable)
- 将整个 AndroidViewComponent 设置为可点击或可长按,点击时会显示灰色蒙层视觉反馈。点击触发
ViewClicked事件,长按触发ViewLongClicked事件。viewComponent:要设置为可点击的视图组件。viewId:该视图的唯一标识符。clickable:是否启用点击事件。longClickable:是否启用长按事件。
MaterialDialog1.MakeWholeViewClickable(HorizontalArrangement1, "myLayout", true, true)
抽屉菜单(Drawer)

- CreateDrawer 创建抽屉菜单(drawerId,contentLayout,mainLayout,drawerWidth,gravity)
- 创建抽屉菜单并将其添加到主布局中。主布局必须是屏幕(Screen)组件。
drawerId:抽屉菜单的唯一标识符。contentLayout:抽屉菜单的内容布局组件。mainLayout:屏幕的主布局组件(通常为屏幕本身)。drawerWidth:抽屉宽度(单位:dp)。gravity:抽屉位置,1表示从左侧滑出(START),2表示从右侧滑出(END)。
- OpenDrawer 打开抽屉菜单(drawerId)
- 打开指定的抽屉菜单。
drawerId:要打开的抽屉菜单的唯一标识符。
- CloseDrawer 关闭抽屉菜单(drawerId)
- 关闭指定的抽屉菜单。
drawerId:要关闭的抽屉菜单的唯一标识符。
MaterialDialog1.CreateDrawer("navDrawer", VerticalArrangement1, Screen1, 250, 1) MaterialDialog1.OpenDrawer("navDrawer") MaterialDialog1.CloseDrawer("navDrawer")
日期/时间选择器
- ShowDatePickerDialog 显示日期选择对话框(dialogId)
- 显示日期选择对话框,允许用户选择年、月、日。选择完成后触发
OnDatePicked事件。dialogId:日期选择对话框的唯一标识符。
效果预览:

MaterialDialog1.ShowDatePickerDialog("datePicker1") - ShowTimePickerDialog 显示时间选择对话框(dialogId)
- 显示时间选择对话框,允许用户选择时和分。选择完成后触发
OnTimePicked事件。dialogId:时间选择对话框的唯一标识符。
效果预览:

MaterialDialog1.ShowTimePickerDialog("timePicker1")
列表选择对话框
- ShowListDialog 显示列表选择对话框(dialogId,title,itemsString)
- 显示包含列表项的选择对话框。用户选择某一项后触发
OnItemSelected事件,提供所选项文本及其索引。dialogId:列表对话框的唯一标识符。title:对话框顶部显示的标题。itemsString:以英文逗号分隔的列表项字符串,例如"选项1,选项2,选项3"。
效果预览:

MaterialDialog1.ShowListDialog("listDialog1", "请选择一个选项", "选项1,选项2,选项3,选项4")
拓展下载
注意:V3 为最新版本,包含抽屉菜单、日期/时间选择器、列表对话框等新功能。
- .aix 拓展下载:
- .aia 示例项目下载:
版权声明
本文档翻译整理自 MIT App Inventor 社区原帖,版权归原作者 Black_Knight(Mr Koder)所有。
原帖链接:MaterialDialog Extension: Enhanced Dialogs and Toasts for App Inventor
扫码添加客服咨询