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

news/2024/11/16 22:05:37/文章来源:https://www.cnblogs.com/yishaochu/p/18389843

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

警告弹窗

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

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

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

  • AlertDialogParamWithConfirm
  • AlertDialogParamWithButtons
  • AlertDialogParamWithOptions

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

参数名 参数类型 必填 参数描述
title ResourceStr 弹窗标题
message ResourceStr 弹窗内容
autoCancel boolean 点击遮障层时,是否关闭弹窗。默认值:true
primaryButton 按钮的文本内容、文本色、按钮背景色和点击回调
secondaryButton 按钮的文本内容、文本色、按钮背景色和点击回调
cancel () => void 点击遮障层关闭dialog时的回调
alignment DialogAlignment 弹窗在竖直方向上的对齐方式。默认值: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

自定义弹窗

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

自定义弹窗的参数:
参数名 参数类型 必填 参数描述
builder CustomDialog 自定义弹窗内容构造器。
cancel () => void 点击遮障层退出时的回调。
autoCancel boolean 是否允许点击遮障层退出。默认值:true
alignment DialogAlignment 弹窗在竖直方向上的对齐方式。默认值:DialogAlignment.Default
offset Offset 弹窗相对alignment所在位置的偏移量。
customStyle boolean 弹窗容器样式是否自定义。默认值: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

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

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

安辉编程笔记

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/789983.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

园区视频监控智能分析系统

园区视频监控智能分析系统应用起来更为便捷,更好地处理对结构性信息内容的要求超过了人眼即时监管范畴的视频监控,进一步体现了园区视频监控智能分析系统的深层使用价值。伴随着视频监控系统经营规模的不断扩大,运用的逐步推进,对互联网融合的需求量更加明显。视频监控作为…

加油站智能视频监控系统

加油站智能视频监控系统集人证认证、信息收集等作用于一体,提早识别和干涉预警。加油站智能视频监控系统对面部识别、车子捕获、红外热成像仪等前面认知安装设备在加油站进出口等地区,完成多维度、全因素的数据采集。即时监控重要地区的工作员。当监控工作人员不穿工作服装时…

加油站监控ai智能分析

加油站监控ai智能分析系统的运作通过用视频智能优化算法,根据自动检索后监控画面后开展预警信息。加油站将依据预警信息立即预警现场的各种人的不安全行为。加油站监控ai智能分析系统,即时监控现场置放消防灭火器的实际操作情况,静电感应释放出来操作规范,并开展24钟头自动…

【安全运营】安全自动化协议SCAP及其12大组件介绍

一、 SCAP产生背景二、SCAP简介三、SCAP 12大组件介绍四、已经支持SCAP的安全工具五、参考链接原创 全栈安全由于计算机和网络技术的快速发展,越来越多的软件和系统被应用到企业和机构中,这些软件和系统的安全问题也日益凸显。 传统的安全措施,如防火墙、入侵检测等,已经无…

Tita的OKR:您绝对不能错过的 OKR 示例!

作为孩子,我们经常被告知要“集中精力”学习才能取得成功。当我们进入企业界时,这种集中或专注的原则经常被忘记。研究表明,拥有具体的目标可以带来更高的绩效和成功的目标实现。 令人惊讶的是,伦敦商学院进行的一项研究显示,在接受调查的 11,000 名高级管理人员中,只有三…

设备工控机及PLC时间同步设置

原理: 产线上对一台电脑进行设置,此电脑从外网获取时间,同时做为内网时间服务器进行时间同步服务,内网中所有不能与外网同步时间的设备电脑通过此服务器进行同步时间。 win10外网同步设置 具体的方法如下: 1、在桌面用鼠标右键单击此电脑,点击属性进入 2、在属性界面点击…

Windows Server 2019 中文版、英文版下载 (updated Aug 2024)

Windows Server 2019 中文版、英文版下载 (updated Aug 2024)Windows Server 2019 中文版、英文版下载 (updated Aug 2024) Windows Server 2019 Version 1809 请访问原文链接:https://sysin.org/blog/windows-server-2019/,查看最新版。原创作品,转载请保留出处。本站将不定…

Windows Server 2016 OVF, updated Aug 2024 (sysin) - VMware 虚拟机模板

Windows Server 2016 OVF, updated Aug 2024 (sysin) - VMware 虚拟机模板Windows Server 2016 OVF, updated Aug 2024 (sysin) - VMware 虚拟机模板 2024 年 8 月版本更新,现在自动运行 sysprep,支持 ESXi Host Client 部署 请访问原文链接:https://sysin.org/blog/windows…

Windows Server 2016 中文版、英文版下载 (updated Aug 2024)

Windows Server 2016 中文版、英文版下载 (updated Aug 2024)Windows Server 2016 中文版、英文版下载 (updated Aug 2024) Windows Server 2016 Version 1607 请访问原文链接:https://sysin.org/blog/windows-server-2016/,查看最新版。原创作品,转载请保留出处。本站将不定…

NSmartProxy:一款.NET开源、跨平台的内网穿透工具

前言 今天大姚给大家分享一款.NET开源、免费(MIT License)、跨平台的内网穿透工具,采用.NET Core的全异步模式打造:NSmartProxy。 内网穿透工具介绍 内网穿透工具是一种能够允许用户从互联网上的任何地方安全地访问并管理处于内网(如家庭网络、公司局域网等)中的设备的工…

信奥赛一本通陈老师解题 1123:图像相似度

​ 【题目描述】给出两幅相同大小的黑白图像(用0-1矩阵)表示,求它们的相似度。说明:若两幅图像在相同位置上的像素点颜色相同,则称它们在该位置具有相同的像素点。两幅图像的相似度定义为相同像素点数占总像素点数的百分比。【输入】第一行包含两个整数m和n,表示图像的行…

LeetCode题集-1- 两数之和

四种解题思路,层层递进,彻底搞定两数之和 这个题目是什么意思呢?简单来说就是在一个数组中找出两个元素,使其和为我们设定的值,并且每个元素只能用一次。如下图具体示例:到这里不知道你是否已经有解题思路了呢? 解法一:双层循环 我第一反应就是双层循环,直接暴力破解。…