通过弹窗控制类进行弹窗及弹窗控制

HarmonyOS ArkUI实战开发—自定义弹窗 自定义弹窗的使用更加灵活,适用于更多的业务场景,在自定义弹窗中您可以自定义弹窗内容,构建更加丰富的弹窗界面。自定义弹窗的界面可以通过装饰器@CustomDialog 定义的组件来实现,然后结合 CustomDialogController 来控制自定义弹窗的显示和隐藏。// 双向绑定传值// 弹窗控制器,控制打开/关闭,必须传入,且名称必须为:controller// 弹窗中的按钮事件// 弹窗中的内容描述build() {Column() { 阅读详情

在日常开发过程中,往往需要进行使用弹窗进行提示或者进行一些信息确认

但是传统的customdialog,往往会在UI代码中占用许多篇幅,现在为大家介绍一种弹窗控制类的编写方法,使我们在需要弹窗的时候可以通过一行代码进行调用

文档地址:https://qcnda4r17bnp.feishu.cn/wiki/RqsXwAr9mifFYBkUuQGcJamRnFc

最佳实践地址:https://gitcode.com/FlyTiger_/DialogUtils/tree/master

/** * @param UIContext 外部通过new UIContext传入 * @param title 传入的弹窗文本 */ public showLightDialog(UIContext: UIContext, title: ResourceStr) { // ComponentContext赋值 this.componentContext = new ComponentContent(UIContext, wrapBuilder(DialogBuilder), title) // 进行弹窗,可以通过延时进行自动关闭 // 第二个参数是弹窗控制option this.promptAction.openCustomDialog(this.componentContext, { maskColor: Color.Transparent }) this.timer = setTimeout(() => { this.promptAction.closeCustomDialog(this.componentContext) }, 2000) }

import { ComponentContent, PromptAction } from '@kit.ArkUI' class DialogUtil { private promptAction: PromptAction = new PromptAction() private componentContext?: ComponentContent<Object> timer: number = -1 timerMap: Record<string, number> = {} /** * @param UIContext 外部通过new UIContext传入 * @param title 传入的弹窗文本 */ public showLightDialog(UIContext: UIContext, title: ResourceStr) { // ComponentContext赋值 this.componentContext = new ComponentContent(UIContext, wrapBuilder(DialogBuilder), title) // 进行弹窗,可以通过延时进行自动关闭 // 第二个参数是弹窗控制option this.promptAction.openCustomDialog(this.componentContext, { maskColor: Color.Transparent }) this.timer = setTimeout(() => { this.promptAction.closeCustomDialog(this.componentContext) }, 2000) } /** * 关闭弹窗 */ public closeLightDialog() { if (this.componentContext) { this.promptAction.closeCustomDialog(this.componentContext) } } /** * 清除定时器 */ clearAllTimeout() { if (this.timer != -1) { clearTimeout(this.timer) } // 如果有多个定时器,进行循环关闭 const timerList = Object.values(this.timerMap) if (timerList.length > 0) { timerList.forEach(element => { clearTimeout(element) }) } } } export const dialogUtil = new DialogUtil() /*------------------------- 弹窗builder -------------------------*/ // 这里传入的参数要和ComponentContext第三个参数类型一致,因参数通过ComponentContext进行传入 @Builder function DialogBuilder(title: ResourceStr) { DialogComp({ text: title }) } /*------------------------- 弹窗组件 -------------------------*/ @Component struct DialogComp { text: ResourceStr = '' build() { Column() { Column() { Text(this.text) .fontColor(Color.White) .fontSize(14) } .height(50) .backgroundColor(Color.Black) .borderRadius(8) .clip(true) .padding({ left: 16, right: 16 }) .justifyContent(FlexAlign.Center) } } }

一、定义私有变量promptAction

private promptAction: PromptAction = new PromptAction()

二、进行绘制弹窗UI

 

@Component struct DialogComp { text: ResourceStr = '' build() { Column() { Column() { Text(this.text) .fontColor(Color.White) .fontSize(14) } .height(50) .backgroundColor(Color.Black) .borderRadius(8) .clip(true) .padding({ left: 16, right: 16 }) .justifyContent(FlexAlign.Center) } } }

三、

  1. 进行弹窗的时候需要使用promptAction.openCustomDialog(),第二个参数需要传入wrapBuilder类型参数

  2. new WarpBuilder() 需要传入Builder类型的组件

  3. 因此将组件使用@Builder装饰器进行包裹

 

// 这里传入的参数要和ComponentContext第三个参数类型一致,因参数通过ComponentContext进行传入 @Builder function DialogBuilder(title: ResourceStr) { DialogComp({ text: title }) }

四、

  1. 定义类方法进行弹窗

  2. 这里写的是轻弹窗,所以设置了定时器进行关闭

 

/** * @param UIContext 外部通过new UIContext传入 * @param title 传入的弹窗文本 */ public showLightDialog(UIContext: UIContext, title: ResourceStr) { // ComponentContext赋值 this.componentContext = new ComponentContent(UIContext, wrapBuilder(DialogBuilder), title) // 进行弹窗,可以通过延时进行自动关闭 // 第二个参数是弹窗控制option this.promptAction.openCustomDialog(this.componentContext, { maskColor: Color.Transparent }) this.timer = setTimeout(() => { this.promptAction.closeCustomDialog(this.componentContext) }, 2000) }

五、

  1. 设置关闭方法以及清除定时器方法完善类的功能

 

/** * 关闭弹窗 */ public closeLightDialog() { if (this.componentContext) { this.promptAction.closeCustomDialog(this.componentContext) } } /** * 清除定时器 */ clearAllTimeout() { if (this.timer != -1) { clearTimeout(this.timer) } // 如果有多个定时器,进行循环关闭 const timerList = Object.values(this.timerMap) if (timerList.length > 0) { timerList.forEach(element => { clearTimeout(element) }) } }

六、进行全局单例导出,方便使用

export const dialogUtil = new DialogUtil()

------------------------------------ 弹窗类的使用 --------------------------------------

 

import { dialogUtil } from '../util/DialogUtil'; import { UIContext } from '@kit.ArkUI'; @Entry @Component struct Index { @State message: string = 'Hello World'; timer: number = -1 aboutToDisappear(): void { dialogUtil.clearAllTimeout() } build() { Column() { Button('点击进行弹窗').onClick((event: ClickEvent) => { dialogUtil.showLightDialog(new UIContext(), '这是一个轻弹窗') }) } .height('100%') .width('100%') .padding({ top: 100 }) } }

鸿蒙开发全局UI方法:【自定义弹窗】 通过CustomDialogController类显示自定义弹窗。使用弹窗组件时,可优先考虑自定义弹窗,便于自定义弹窗的样式与内容。 阅读详情

相关推荐

鸿蒙应用开发之弹窗

自定义弹窗的使用更加灵活,适用于更多的业务场景,在自定义弹窗中您可以自定义弹窗内容,构建更加丰富的弹窗界面。自定义弹窗的界面可以通过装饰器@CustomDialog定义的组件来实现,然后结合CustomDialogController来控制自定义弹窗的显示和隐藏。下面我们通过一个兴趣爱好的选择框来介绍自定义弹窗的使用。从上面的效果图可以看出,这个选择框是一个多选的列表弹窗,我们可以使用装饰器@CustomDialog,结合List组件来完成这个弹窗布局,实现步骤如下:1,初始化弹窗数据。

xiangzhihong8的专栏 1490

如何使用SweetAlert2 Timer类实现精准弹窗控制:完整指南

SweetAlert2是一个功能强大、美观且零依赖的JavaScript弹窗替代方案,它提供了丰富的自定义选项和无障碍支持。其中Timer类是实现弹窗自动关闭、进度显示和交互控制的核心组件,本文将详细介绍如何利用这一工具实现精准的弹窗时间管理。 [![SweetAlert2弹窗控制工具](https://raw.gitcode.com/gh_mirrors/swe/sweetalert2/raw

gitblog_00725的博客 425

告别报错!Win10下Autodock Vina 1.2.3保姆级安装与避坑指南

本文提供了Win10系统下Autodock Vina 1.2.3的完整安装与实战指南,涵盖环境配置、分子文件预处理、对接参数优化及结果分析等关键步骤。通过详细的避坑技巧和优化方案,帮助用户高效完成分子对接任务,特别适合生物信息学研究人员和药物发现领域的初学者。

weixin_29969209的博客 405

html如何控制弹窗位置,控制弹窗展示顺序

工作中遇到一个需求,就是控制用户进入应用时自动打开弹窗的展示顺序。需求和现状用户进入应用时会展示一系列的弹窗,这些弹窗的展示内容以及展示与否取决于进入应用时的一系列请求结果。由于接口请求返回数据的时间不确定,所以依赖不同接口的弹窗之间的展示顺序也不确定,且多个弹窗会出现叠加展示的问题,用户体验很不好。产品需求就是希望弹窗的展示顺序可控,并且同时只展示一个弹窗。解决方案解决思路是这样:封装一个中间层...

weixin_35094408的博客 1521

DC/DC开关电源EMC仿真红宝书

本红宝书系统性介绍开关电源EMC仿真方法,包括仿真原理、仿真思路、仿真工具以及仿真效率提升与仿测一致性的实战经验。从理论到仿真,从仿真到应用,真正帮你实现一文掌握开关电源EMC仿真!全文约14000字,适读人群:开关电源设计、电磁兼容EMC相关从业者,电磁相关专业研究生及CST仿真爱好者等。

电磁学社 2502

MySQL服务启动失败?手把手教你排查NET HELPMSG 3534错误(附完整修复流程)

本文针对Windows平台上MySQL服务启动失败并提示NET HELPMSG 3534错误的常见问题,提供了系统性的排查与修复指南。文章深入剖析了错误本质,并手把手教你通过查看MySQL错误日志、检查并初始化数据目录、修正Windows服务配置、排查my.ini配置文件陷阱等核心步骤,彻底解决这一棘手问题,帮助开发者和运维人员快速恢复数据库服务。

wdx0123456的博客 895

Android 自定义View 之 Dialog弹窗

  在日常开发中用到弹窗是比较多的,常用于提示作用,比如错误操作提示,余额不足提示,退出登录提示等,还有用于数据展示的弹窗,上拉弹窗等等,主要为了简化在日常开发中的使用。  Android中的Dialog弹窗是一种用于展示特定信息或者在用户需要进行某些操作时才显示的窗口。Dialog弹窗可以分为系统提供的常规Dialog弹窗和自定义Dialog弹窗。  常规Dialog弹窗包括AlertDialog、ProgressDialog、DatePickerDialog、TimePickerDialog等,这些Di

晨曦 1万+

DeepMD-kit描述子机制解析:从原子坐标到不变性特征

本文深入解析DeepMD-kit描述子机制,详细阐述如何将原子坐标转换为具有平移、旋转和排列不变性的特征表示。探讨了se_e2_a、se_e3等不同描述子的适用场景及性能优化技巧,帮助读者掌握这一关键技术在分子模拟中的应用实践。

weixin_42520661的博客 340

cesium弹窗不显示,cavans页面精确查找元素

在cesium上添加得地图弹窗,bubbles页面的数据都渲染完,但是不显示弹窗,控制台也没有报错的情况下,由于cesium的绘制是通过cavans,无法通过元素直接定位,上图是整个弹窗的代码,可以通过控制台中搜索文本中独有的class类,来查找对应的弹窗样式,来找到对应的元素。(下图是正常情况下元素定位)

A_Liyulong的博客 261

(超全面,超基础)Kriging插值推导理论笔记,算法,普通克里金

最近老师让我再重新推导一下克里金插值的方法如何求出预测结果,于是我又无数次地打开了大神的推导原理过程链接????:克里金(Kriging)插值的原理与公式推导 作者:xg1990,但是不可避免地在推导过程中,数学知识基础薄弱的我卡住在一些公式推导的步骤中。 所以就想基于上面大神的推导过程,将里面的推导写得更具体些,当然觉得毫不吃力可以进行推导的大神们可以不看我的注释,直接点开链接看就好。 我看到csdn中很多关于克里金推导的博客里面的内容直接截屏或者复制了上面链接里大神发表的内容,也不注

Olivel1997的博客 1万+

Flutter蓝牙开发实战:flutter_blue_plus核心功能与实现原理剖析

本文深入剖析了Flutter蓝牙开发插件flutter_blue_plus的核心功能与实现原理。文章从源码解析入手,详细讲解了蓝牙状态管理、设备扫描、GATT连接、服务发现以及数据读写等关键流程的实现机制,并分享了实战中的性能调优与常见问题解决方案,帮助开发者高效构建跨平台蓝牙应用。

weixin_29014237的博客 443

react通过Ref优雅的实现弹窗的控制

可以在父组件中修改弹窗的visible属性,然后传给子组件弹窗,打开子组件(不推荐)。:可以在子组件弹窗中写修改visible属性的方法,然后父组件点击事件调用子组件方法打开弹窗(推荐)在react中class写法和hook的写法还是有区别的,接下来我通过简单的demo介绍一下这两种写法。(用的是antd组件库)

阿琰a_的博客 1905

AI工程化之生成式UI & A2UI(二)

本文介绍了生成式UI框架A2UI的架构设计与核心实现。项目采用AI协作开发模式,通过ATDD(AI驱动的测试驱动开发)确保代码质量。前端SDK基于zustand实现框架无关的状态管理,包含协议解析器、存储管理、渲染器等核心模块。重点展示了基础store构建、A2UI协议解析器的实现过程,包括mock数据准备、测试用例生成和可视化调试。项目采用monorepo管理,利用vite实现高效开发构建。整个系统设计遵循模块化原则,通过清晰的接口定义实现各组件解耦,为后续功能扩展打下基础。

qq_34306228的博客 407

Spring Security 登录失败后弹窗提示的一种方案

Spring Security 登录失败怎么弹窗提示

Fymphony的博客 1202

智能车竞赛飞檐走壁组立体赛道电磁引导线设计与实现

本文深入解析了智能车竞赛飞檐走壁组立体赛道电磁引导线的核心设计与实现。针对垂直面、圆筒、跷跷板等立体元素,详细阐述了电磁线规格参数选择、三维空间铺设技巧及磁场调试方法,旨在帮助参赛队伍打造稳定可靠的导航系统,提升车模在复杂立体赛道上的通过率与稳定性。

bert9linguist的博客 281

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

5.UI架构 弹窗管理器

仿照移动端的弹窗机制写的UI架构:所有的UI窗口 在加载后都注入到弹窗管理器中进行管理开关和赋值显示。 代码架构: 1 弹窗父类Activity 2.具体弹窗类 xxActivtiy .3.弹窗管理器AcitivtiyManger.4,传递数据类 bundle.5 加载注入类LoadInUI.6.数据信息接受控制类xxUIController. 具体代码: 1 弹窗父类Activi...

s_xiajunjun1986的博客 734

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

iOS弹窗顺序弹出管理

希望弹窗顺序弹出,但是又关心弹出的优先级。下面是自己简单的实现,不足之处,请指出。 .h /** ⚠️⚠️⚠️:PRPopupManager 此管理类不关心弹窗的show和hide 只约束弹窗是否被拦截一个一个展示、或者某几个同时展示 */ #import <Foundation/Foundation.h> ///优先级枚举 typedef NS_ENUM(NSUInteger, PRPopupPriority) { PRPopupPriorityLow = 1, //

ZHFDBK的博客 1831

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【HarmonyOS开发】ArkUI中的自定义弹窗

自定义弹窗的使用更加灵活,适用于更多的业务场景,在自定义弹窗中您可以自定义弹窗内容,构建更加丰富的弹窗界面。

qq_23334071的博客 1638

cocos2d弹窗_Cocos2d-X lua 学习笔记之消息弹窗

导读热词实现游戏中需要在屏幕底部弹出消息提示弹窗,经过特定时间后渐隐消失。当有新的消息提示时,原来没有消失的弹窗会上移,并继续渐隐直至消失。转载声明:http://blog.youkuaiyun.com/operhero1990/article/details/471653651、使用cocostudio建立一个最简单的弹窗界面,命名为hintFrame设置黑底的透明度为100/255,这样能起到一个蒙版的效...

weixin_29516495的博客 398

swift弹窗

我整理的一些关于【FT】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/f2PFnN在Swift中实现弹窗的完整指南 在iOS开发中,弹窗(Alert)是一种常见的用户交互方式,用于向用户显示信息、提示或者请求用户的确认。为了帮助刚入行的小白,我将分步骤详细说明如何在Swif...

weixin_40748419的博客 216

Android 实现气泡布局/弹窗,可控制气泡尖角方向及偏移量

Android 自定义布局实现气泡弹窗,可控制气泡尖角方向及偏移量。效果图实现首先自定义一个气泡布局。/** * 气泡布局 */ public class BubbleRelativeLayout extends RelativeLayout { /** * 气泡尖角方向 */ public enum BubbleLegOrientation {

LeBron_Six的专栏 2万+

android 触摸优先级,Android 如何实现弹窗顺序&优先级控制

一般在项目首页中,往往会有多个对话框需要弹出,比如活动弹窗、更新弹窗、评分弹窗等等,而且这些弹窗是有优先级顺序的。这些弹窗一般是通过接口请求后返回结果再显示的,如果只有几个弹窗还好处理,业务逻辑上判断一下先后显示就可以。如果有十几个或者更多,那么处理起来将非常麻烦,而且容易出现问题。所以封装一个可以按照优先级顺序显示的弹窗功能就非常有必要,首先功能需求如下:按优先级顺序阻塞式显示各种类型弹窗,默认...

weixin_28928039的博客 1797

php简单实用的客户端控制类

php简单实用的客户端控制类 <?php/*** 文件: alert.class.php* 功能: 对客户端window封装,使用php控制客户端行为* @author xiaog*/class clientWindow { private static $SCRIPT = "<script type=...

weixin_30328063的博客 77

掌握 Flutter 中的 `Overlay` 和 `OverlayEntry`:弹窗管理的艺术

通过使用Overlay和,我们可以更精细地控制弹窗的显示和层级,确保它们能够覆盖其他弹窗。类提供了一个可重用的方式来管理弹窗的显示和隐藏,使得在多个地方调用和控制弹窗变得轻松而高效。这种方法不仅提高了代码的可维护性,也提升了用户体验。

smileKH的博客 1864

html+css+js气泡弹窗

微信安装完成,点击查看

w11111xxxl的博客 1324
下一篇: HarmonyOS 退出app进行手势拦截
方天画戟的博客
博客等级 码龄1年 2粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值