MaterialDialog 对话框增强扩展

« 返回首页

MaterialDialog 对话框增强扩展

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

代码块预览:

代码块截图1 代码块截图2 代码块截图3

动态效果预览:

MaterialDialog 预览

属性

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)。

效果预览:

CreateDialogFromView 效果

代码示例:

CreateDialogFromView 代码块

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 颜色字符串(当前版本暂未使用,可传空字符串)。

效果预览:

CreateTitleDialog 效果

MaterialDialog1.CreateTitleDialog("myDialog", "确认操作", "您确定要继续吗?", "是", "否", "取消", true, false, "")
Show 显示对话框(dialogId)
显示已创建的对话框。请确保在调用此方法前已通过 CreateDialogFromViewCreateTitleDialog 创建了对应对话框。
  • 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)。

效果预览:

ShowToast 效果

MaterialDialog1.ShowToast(Label1, MaterialDialog1.LongLength)

底部面板(Bottom Sheet)

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

效果预览:

CreateBottomSheet 效果

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:日期选择对话框的唯一标识符。

效果预览:

ShowDatePickerDialog 效果

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

效果预览:

ShowTimePickerDialog 效果

MaterialDialog1.ShowTimePickerDialog("timePicker1")

列表选择对话框

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

效果预览:

ShowListDialog 效果

MaterialDialog1.ShowListDialog("listDialog1", "请选择一个选项", "选项1,选项2,选项3,选项4")

拓展下载

注意:V3 为最新版本,包含抽屉菜单、日期/时间选择器、列表对话框等新功能。

  • .aix 拓展下载:

MaterialDialog_v3.aix

  • .aia 示例项目下载:

MaterialDialog_dialogs.aia


版权声明

本文档翻译整理自 MIT App Inventor 社区原帖,版权归原作者 Black_Knight(Mr Koder)所有。

原帖链接:MaterialDialog Extension: Enhanced Dialogs and Toasts for App Inventor

文档反馈