鸿蒙(HarmonyOS)常见的三种弹窗方式

2024-08-31 12:20

本文主要是介绍鸿蒙(HarmonyOS)常见的三种弹窗方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近有一个想法,做一个针对鸿蒙官方API的工具箱项目,介绍常用的控件,以及在项目中如何使用,今天介绍Harmony中如何实现弹窗功能。

警告弹窗

警告弹窗是一个App中非常常用的弹窗,例如:

  • 删除一条记录,提示一下用户:您确定要删除吗?
  • 在App首页,点击返回时,提示一下用户:您确定要退出App吗?

使用AlertDialog.show方法进行弹窗,这个方法支持传入以下三个类中的任意一个对象

  • AlertDialogParamWithConfirm
  • AlertDialogParamWithButtons
  • AlertDialogParamWithOptions

以AlertDialogParamWithButtons对象进行说明,下面表格介绍常用属性:

参数名参数类型必填参数描述
titleResourceStr弹窗标题
messageResourceStr弹窗内容
autoCancelboolean点击遮障层时,是否关闭弹窗。默认值:true
primaryButton{value: ResourceStr,fontColor?: ResourceColor,backgroundColor?: ResourceColor,action: () => void;}按钮的文本内容、文本色、按钮背景色和点击回调
secondaryButton{value: ResourceStr,fontColor?: ResourceColor,backgroundColor?: ResourceColor,action: () => void;}按钮的文本内容、文本色、按钮背景色和点击回调
cancel() => void点击遮障层关闭dialog时的回调
alignmentDialogAlignment弹窗在竖直方向上的对齐方式。默认值:DialogAlignment.Default

接下来,我们用代码来实现一下:

AlertDialog.show({title:"弹窗标题",message:"这是弹窗内容",autoCancel:true,//点击遮障层时,是否关闭弹窗。默认值:truealignment: DialogAlignment.Center,//弹窗在竖直方向上的对齐方式。默认值:DialogAlignment.DefaultprimaryButton: {value: "取消",fontColor: '#181818',action: () => {AppUtil.showToast("点击了取消按钮");}},secondaryButton: {value: "确定",fontColor: $r('app.color.mainColor'),action: () => {AppUtil.showToast("点击了确定按钮");}},cornerRadius:12,//弹窗边框弧度width:'80%', //弹窗宽度cancel:()=>{AppUtil.showToast("点击遮障层关闭dialog时的回调");}
})

效果图:

参考官方链接:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V2/ts-methods-alert-dialog-box-0000001478341185-V2

自定义弹窗

自定义弹窗相比警告弹窗更为灵活,支持自定义弹窗的样式与内容。

自定义弹窗的参数:
参数名参数类型必填参数描述
builderCustomDialog自定义弹窗内容构造器。
cancel() => void点击遮障层退出时的回调。
autoCancelboolean是否允许点击遮障层退出。默认值:true
alignmentDialogAlignment弹窗在竖直方向上的对齐方式。默认值:DialogAlignment.Default
offsetOffset弹窗相对alignment所在位置的偏移量。
customStyleboolean弹窗容器样式是否自定义。默认值:false,弹窗容器的宽度根据栅格系统自适应,不跟随子节点;高度自适应子节点,最大为窗口高度的90%;圆角为24vp。
gridCount8+number弹窗宽度占栅格宽度的个数。默认为按照窗口大小自适应,异常值按默认值处理,最大栅格数为系统最大栅格数。

代码实现

我们使用自定义弹窗实现隐私政策弹窗,新建PrivacyPolicyDialogBackUp类,也就是内容构造器,使用@CustomDialog修饰,内部有一个属性controller: CustomDialogController,这些都是常规写法,然后在build中实现界面布局。

@CustomDialog
export default struct PrivacyPolicyDialogBackUp{controller: CustomDialogControllercancel!: () => voidconfirm!: () => voidbuild() {Column() {Text($r('app.string.simple_user_policy')).fontSize(18).fontColor($r('app.color.title_color')).margin({ top: 30, bottom: 19 })Scroll(){Text(){Span($r('app.string.privacy_policy_start'))Span($r('app.string.user_agreement_two')).fontColor($r('app.color.mainColor')).onClick(() => {this.openWebUrl("/useragreement.html");})Span($r('app.string.and'))Span($r('app.string.privacy_policy_two')).fontColor($r('app.color.mainColor')).onClick(() => {this.openWebUrl("/privacypolicy.html");})Span($r('app.string.simple_privacy_policy'))}.fontSize(16).fontColor($r('app.color.body_color')).margin({left:25,right:25})}.height(120)Column(){Button($r('app.string.disagree_privacy_policy')).onClick(() => {this.controller.close();this.cancel();}).fontColor($r('app.color.other_color')).fontSize(15).backgroundColor(Color.Transparent)Button($r('app.string.agree_privacy_policy')).onClick(() => {this.controller.close();this.confirm();}).fontColor($r('app.color.white')).fontSize(17).linearGradient({direction: GradientDirection.Right, colors:[[$r('app.color.start_main_color'),0.0],[$r('app.color.end_main_color'),1.0]]}).width('80%').margin({top:15,bottom:21}).borderRadius(24)}}}openWebUrl(urlSuffix:string){let url= AppConstant.URL+urlSuffix;logger.info("url:"+url)router.pushUrl({url: Pages.WebViewPage,params:{data1: 'message',url: url,  // 传递的 URL 参数}}, router.RouterMode.Single)}
}

在组件中创建CustomDialogController实例,指定builder属性,就是上面写的内容构造器

privacyPolicyDialog: CustomDialogController = new CustomDialogController({builder: PrivacyPolicyDialog({cancel:this.onCancel.bind(this),confirm:this.onAgree.bind(this)}),alignment: DialogAlignment.Default,  // 可设置dialog的对齐方式,设定显示在底部或中间等,默认为底部显示cornerRadius:13,autoCancel:false
})

显示弹窗

this.privacyPolicyDialog.open();

关闭弹窗

this.privacyPolicyDialog.close();

效果图:

参考官方链接:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V2/ts-methods-custom-dialog-box-0000001477981237-V2

加载中弹窗

加载中弹窗弹窗其实就是自定义弹窗实现,只是内容构造器不一样而已,给Image组件设置animation动画,无限循环图片

@CustomDialog
export default struct LoadingDialog {controller: CustomDialogControllerprivate loadingText: string|Resource = "加载中..."@State angle:number = 10aboutToAppear(){setTimeout(()=>{this.angle = 1440 // 设定一个大的旋转角度,确保动画执行},100)}build() {Column(){Image($r('app.media.icon_loading_3')).width(70).height(70).rotate({angle:this.angle}).animation({duration: 5000,curve: Curve.Linear,delay: 0,iterations: -1, // 设置-1表示动画无限循环playMode: PlayMode.Normal})Text(this.loadingText).fontSize(14).fontColor(0xffffff).margin({top:10})}.backgroundColor(0x88000000).borderRadius(10).padding({left:20,right:20,top:10,bottom:10})}
}

效果图:

源码下载:

https://github.com/ansen666/harmony_tools

如果您想第一时间看我的后期文章,扫码关注公众号

      安辉编程笔记 - 开发技术分享扫描二维码加关注

安辉编程笔记

这篇关于鸿蒙(HarmonyOS)常见的三种弹窗方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1123886

相关文章

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用

java中long的一些常见用法

《java中long的一些常见用法》在Java中,long是一种基本数据类型,用于表示长整型数值,接下来通过本文给大家介绍java中long的一些常见用法,感兴趣的朋友一起看看吧... 在Java中,long是一种基本数据类型,用于表示长整型数值。它的取值范围比int更大,从-922337203685477

华为鸿蒙HarmonyOS 5.1官宣7月开启升级! 首批支持名单公布

《华为鸿蒙HarmonyOS5.1官宣7月开启升级!首批支持名单公布》在刚刚结束的华为Pura80系列及全场景新品发布会上,除了众多新品的发布,还有一个消息也点燃了所有鸿蒙用户的期待,那就是Ha... 在今日的华为 Pura 80 系列及全场景新品发布会上,华为宣布鸿蒙 HarmonyOS 5.1 将于 7

Mybatis的分页实现方式

《Mybatis的分页实现方式》MyBatis的分页实现方式主要有以下几种,每种方式适用于不同的场景,且在性能、灵活性和代码侵入性上有所差异,对Mybatis的分页实现方式感兴趣的朋友一起看看吧... 目录​1. 原生 SQL 分页(物理分页)​​2. RowBounds 分页(逻辑分页)​​3. Page

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

详解Linux中常见环境变量的特点与设置

《详解Linux中常见环境变量的特点与设置》环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息,理解环境变量对于系统管理、软件开发都很重要,下面小编就为大家详细介绍一下吧... 目录前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流