学习笔记(三十):ArkUi-UIContext.getPromptAction(弹窗)
概述:
基于promptAction弹窗演进而来,支持全局自定义弹窗,不依赖UI组件,依赖UIContext,
支持在非页面文件中使用,弹窗内容支持动态修改,支持自定义弹窗圆角半径、大小和位置,
适合在与页面解耦的全局弹窗、自定义弹窗显示和退出动画等场景下使用。
注意:
需先使用UIContext中的getPromptAction()方法获取到PromptAction对象,再通过该对象调用对应方法
一、导入模块
import { PromptAction } from '@kit.ArkUI';
注意这里导入的是PromptAction ,而promptAction导入的是promptAction
promptAction 的导入: import { promptAction } from '@kit.ArkUI';
二、定义一个PromptAction
let promptAction:PromptAction = this.uiContext.getPromptAction();
uiContext的定义
import { PromptAction, UIContext } from '@kit.ArkUI'; uiContext : UIContext = this.getUIContext()
三、showToast
showToast(options: promptAction.ShowToastOptions): void
创建并显示文本提示框
1、简单使用:
// UIContext.getPromptAction使用示例 import { PromptAction, UIContext } from '@kit.ArkUI'; @Entry @Component struct UiPromptActionExample { @State message: string = 'Hello World'; uiContext : UIContext = this.getUIContext() // 显示toast showToast(){ // 获取PromptAction let promptAction:PromptAction = this.uiContext.getPromptAction(); promptAction.showToast({ message: '提示内容' }) } build() { Row() { Column() { Button('toast') .fontSize(20) .fontWeight(FontWeight.Bold) .onClick(() => { this.showToast() }) } .width('100%') } .height('100%') } }
2、ShowToastOptions,文本提示框的选项
1、message,必填
string | Resource类型,显示的文本信息
说明:默认字体为'Harmony Sans',不支持设置其他字体。
2、duration,非必填
number类型,显示时长(毫秒)
说明:默认值1500ms,取值区间:1500ms-10000ms。若小于1500ms则取默认值,若大于10000ms则取上限值10000ms。
3、bottom,非必填
string | number类型,设置弹窗底部边框距离导航条的高度
说明:默认值:80vp;ToastShowMode.TOP_MOST模式下,软键盘拉起时,如果bottom值过小,toast要被软键盘遮挡时,会自动避让至距离软键盘80vp处。ToastShowMode.DEFAULT模式下,软键盘拉起时,会上移软键盘的高度。
4、showMode,非必填
ToastShowMode类型,设置弹窗是否显示在应用之上。
说明:默认值:ToastShowMode.DEFAULT,默认显示在应用内。
5、alignment,非必填
Aligment类型,对齐方式。
说明:默认值:undefined,默认底部偏上位置。
6、offset,非必填
Offset类型,在对齐方式上的偏移。
说明:默认值:{dx:0, dy:0},默认没有偏移。
7、backgroundColor ,非必填
ResourceColor类型,文本提示框背板颜色
说明:默认值:Color.Transparent;当设置了backgroundColor为非透明色时,backgroundBlurStyle需要设置为BlurStyle.NONE,否则颜色显示将不符合预期效果。
8、textColor ,非必填
ResourcseColor类型,文本提示框文本颜色
说明:默认值:Color.Black
9、backgroundBlurStyle,非必填
BlurStyle类型,文本提示框背板模糊材质
说明:
默认值:BlurStyle.COMPONENT_ULTRA_THICK
设置为BlurStyle.NONE即可关闭背景虚化。当设置了backgroundBlurStyle为非NONE值时,则不要设置backgroundColor,否则颜色显示将不符合预期效果。
10、shadow,非必填
ShadowOptions | ShadowStyle 类型,文本提示框背板阴影
说明:默认值:ShadowStyle.OuterDefaultMD
创建并弹出dialogContent对应的自定义弹窗,使用Promise异步回调。
通过该接口弹出的弹窗内容样式完全按照dialogContent中设置的样式显示,即相当于customdialog设置customStyle为true时的显示效果。
暂不支持isModal = true与showInSubWindow = true同时使用。
openCustomDialog<T extends Object>(dialogContent: ComponentContent<T>, options?: promptAction.BaseDialogOptions): Promise<void>
使用示例:
// UIContext.getPromptAction使用示例 import { ComponentContent, PromptAction, UIContext } from '@kit.ArkUI'; @Entry @Component struct UiPromptActionExample { @State message: string = 'Hello World'; uiContext : UIContext = this.getUIContext() // 显示dialog showDialog(){ // 获取PromptAction let promptAction:PromptAction = this.uiContext.getPromptAction(); let contentNode = new ComponentContent(this.uiContext, wrapBuilder(buildText), new Params(this.message)); // 打开弹框 promptAction.openCustomDialog(contentNode) } build() { Row() { Column() { Button('openDialog') .fontSize(20) .fontWeight(FontWeight.Bold) .onClick(() => { this.showDialog() }) } .width('100%') } .height('100%') } } @Builder function buildText(params: Params) { Column() { Text(params.text) .fontSize(50) .fontWeight(FontWeight.Bold) .margin({bottom: 36}) }.backgroundColor('#FFF0F0F0') } class Params { text: string = "" constructor(text: string) { this.text = text; } }
六、closeCustomDialog
关闭已弹出的dialogContent对应的自定义弹窗,使用Promise异步回调。
closeCustomDialog<T extends Object>(dialogContent: ComponentContent<T>): Promise<void>
使用示例:
// UIContext.getPromptAction使用示例 import { ComponentContent, PromptAction, UIContext } from '@kit.ArkUI'; @Entry @Component struct UiPromptActionExample { @State message: string = 'Hello World'; uiContext : UIContext = this.getUIContext() // 显示dialog showDialog(){ // 获取PromptAction let promptAction:PromptAction = this.uiContext.getPromptAction(); let contentNode = new ComponentContent(this.uiContext, wrapBuilder(buildText), new Params(this.message)); // 打开弹框 promptAction.openCustomDialog(contentNode) setTimeout(() => { promptAction.closeCustomDialog(contentNode); }, 2000); //2秒后自动关闭 } build() { Row() { Column() { Button('openDialog') .fontSize(20) .fontWeight(FontWeight.Bold) .onClick(() => { this.showDialog() }) } .width('100%') } .height('100%') } } @Builder function buildText(params: Params) { Column() { Text(params.text) .fontSize(50) .fontWeight(FontWeight.Bold) .margin({bottom: 36}) }.backgroundColor('#FFF0F0F0') } class Params { text: string = "" constructor(text: string) { this.text = text; } }
七、updateCustomDialog
updateCustomDialog<T extends Object>(dialogContent: ComponentContent<T>, options: promptAction.BaseDialogOptions): Promise<void>
更新已弹出的dialogContent对应的自定义弹窗的样式
弹窗样式,目前仅支持更新alignment、offset、autoCancel、maskColor
使用示例:
两秒够更新alignment 使弹框居中显示
// UIContext.getPromptAction使用示例 import { ComponentContent, PromptAction, UIContext } from '@kit.ArkUI'; @Entry @Component struct UiPromptActionExample { @State message: string = 'Hello World'; uiContext: UIContext = this.getUIContext() // 显示dialog showDialog() { // 获取PromptAction let promptAction: PromptAction = this.uiContext.getPromptAction(); let contentNode = new ComponentContent(this.uiContext, wrapBuilder(buildText), new Params(this.message)); // 打开弹框 promptAction.openCustomDialog(contentNode) setTimeout(() => { promptAction.updateCustomDialog(contentNode,{alignment:DialogAlignment.Center}); }, 2000); //2秒后自动关闭 } build() { Row() { Column() { Button('openDialog') .fontSize(20) .fontWeight(FontWeight.Bold) .onClick(() => { this.showDialog() }) } .width('100%') } .height('100%') } } @Builder function buildText(params: Params) { Column() { Text(params.text) .fontSize(50) .fontWeight(FontWeight.Bold) .margin({ bottom: 36 }) }.backgroundColor('#FFF0F0F0') } class Params { text: string = "" constructor(text: string) { this.text = text; } }
八、更新弹框内容
setTimeout(() => { contentNode.update(new Params("修改内容")) }, 2000); //2秒后更新组件内容
九、openCustomDialog,closeCustomDialog另一种使用方式
创建并弹出自定义弹窗。使用Promise异步回调,返回供closeCustomDialog使用的对话框id。暂不支持isModal = true与showInSubWindow = true同时使用。
openCustomDialog(options: promptAction.CustomDialogOptions): Promise<number>
关闭自定义弹窗
closeCustomDialog(dialogId: number): void
使用示例:
import { PromptAction } from '@kit.ArkUI'; @Entry @Component struct Index { promptAction: PromptAction = this.getUIContext().getPromptAction() private customDialogComponentId: number = 0 @Builder customDialogComponent() { Column() { Text('弹窗').fontSize(30) Row({ space: 50 }) { Button("确认").onClick(() => { this.promptAction.closeCustomDialog(this.customDialogComponentId) }) Button("取消").onClick(() => { this.promptAction.closeCustomDialog(this.customDialogComponentId) }) } }.height(200).padding(5).justifyContent(FlexAlign.SpaceBetween) } build() { Row() { Column() { Button("click me") .onClick(() => { this.promptAction.openCustomDialog({ builder: () => { this.customDialogComponent() }, onWillDismiss: (dismissDialogAction: DismissDialogAction) => { console.info("reason" + JSON.stringify(dismissDialogAction.reason)) console.log("dialog onWillDismiss") if (dismissDialogAction.reason == DismissReason.PRESS_BACK) { dismissDialogAction.dismiss() } if (dismissDialogAction.reason == DismissReason.TOUCH_OUTSIDE) { dismissDialogAction.dismiss() } } }).then((dialogId: number) => { this.customDialogComponentId = dialogId }) }) } .width('100%') .height('100%') } .height('100%') } }
作者:听着music睡
出处:http://www.cnblogs.com/xqxacm/
Android交流群:38197636
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。