当前位置: 首页 > news >正文

HarmonyOS7 Dialog 与 ActionSheet:弹窗全家桶对比

文章目录

    • 前言
    • 一、AlertDialog:标准确认框
      • 代码实现
    • 二、CustomDialog:自定义弹窗
      • 核心代码
    • 三、ActionSheet:底部动作菜单
      • 完整示例
    • 三类怎么选
    • 常见误区(小白必踩)
    • 完整可运行示例:Dialog 与 ActionSheet
      • 代码解析
    • 写在最后

前言

弹窗是 app 里绕不开的交互:确认删除、选择性别、底部拉起分享菜单……HarmonyOS 提供了好几种弹窗组件,新手常搞不清该用哪个。

这篇文章我把最常用的三类——AlertDialog(确认框)、CustomDialog(自定义弹窗)、ActionSheet(底部动作菜单)——摆在一起对比,给你一张"闭眼选"的表。

一、AlertDialog:标准确认框

最简单,直接用,不用自己写布局:

代码实现

import{AlertDialog}from'@kit.ArkUI'AlertDialog.show({title:'确认删除',message:'删除后不可恢复,确定吗?',primaryButton:{value:'取消',action:()=>{}},secondaryButton:{value:'删除',fontColor:'#FF0000',action:()=>{this.doDelete()}}})
  • title/message:标题和正文。
  • primaryButton/secondaryButton:左右两个按钮,各带action回调。
  • 适合"确认/取消"类简单提示,零布局成本。

二、CustomDialog:自定义弹窗

当内置弹窗装不下你的内容(比如要填表单、要放图片),用CustomDialog塞任意 UI:

核心代码

@CustomDialogstruct MyDialog{controller:CustomDialogController@Localname:string=''build(){Column(){Text('编辑昵称').fontSize(18)TextInput({text:this.name}).onChange(v=>this.name=v)Button('确定').onClick(()=>{this.controller.close()// 关闭弹窗})}.padding(16)}}// 使用时this.dialogCtrl=newCustomDialogController({builder:MyDialog()})this.dialogCtrl.open()// 打开

要点:

  • @CustomDialog装饰的 struct 就是弹窗内容,build里随便写。
  • CustomDialogController控制开/关,.open()弹出、.close()关闭。
  • 这是"复杂弹窗"的唯一正解。

三、ActionSheet:底部动作菜单

从底部滑出一个选项列表,典型如"分享到微信/朋友圈/复制链接":

完整示例

import{ActionSheet}from'@kit.ArkUI'ActionSheet.show({title:'分享到',confirm:{value:'取消',action:()=>{}},sheets:[{title:'微信',action:()=>this.share('wechat')},{title:'朋友圈',action:()=>this.share('moments')},{title:'复制链接',action:()=>this.share('copy')}]})
  • sheets是选项数组,每个选项有标题和点击回调。
  • 系统自带底部滑出动画,体验统一。

三类怎么选

弹窗适用是否需要自定义布局
AlertDialog确认/取消提示
CustomDialog表单、复杂内容
ActionSheet底部多选项菜单否(列表式)

一句话:简单确认用 AlertDialog,底部多选用 ActionSheet,内容复杂用 CustomDialog。别为了一个简单的"确定吗"去写 CustomDialog,杀鸡用牛刀。

常见误区(小白必踩)

误区说明
简单确认写 CustomDialog就一个"确定吗",用AlertDialog零布局成本,别杀鸡用牛刀。
AlertDialog不写按钮回调primaryButton/secondaryButtonaction不写,点了没反应。
CustomDialog 忘了close()弹窗里的按钮逻辑执行完要this.controller.close(),否则关不掉。

下面这段代码可以直接复制到 DevEco Studio 里运行。建议你边读边敲,改一改文末「动手改一改」里的参数,亲眼看看效果。

完整可运行示例:Dialog 与 ActionSheet

对比「居中对话框」和「底部操作表」两种弹窗。

代码解析

// AlertDialog 与 ActionSheet 两种弹窗@Entry@Componentstruct PopDemo{build(){Column({space:16}){Button('普通对话框').onClick(()=>{AlertDialog.show({title:'提示',message:'确定要删除吗?',primaryButton:{value:'取消',action:()=>{}},secondaryButton:{value:'删除',action:()=>{}}})})Button('底部操作表').onClick(()=>{ActionSheet.show({title:'选择操作',confirm:{value:'取消',action:()=>{}},sheets:[{title:'拍照'},{title:'从相册选择'}]})})}.padding(20)}}

你会看到什么:点第一个按钮,中间弹出带「取消/删除」的对话框;点第二个,底部升起一个操作列表。两者都无需自己写布局,系统样式统一。

动手改一改

  • AlertDialogshowInSubWindow: true,做成全局悬浮弹窗。
  • sheets每一项加action回调,分别触发不同逻辑。
  • 用自定义CustomDialog替代系统弹窗,做品牌化 UI。

写在最后

弹窗选型不难,关键是别过度设计。我见过有人所有弹窗都写 CustomDialog,结果几十行代码就为弹个"确定取消"——纯属浪费。

把上面三个例子存进你的代码片段库,下次要弹窗先想一句话:"确认、菜单、还是复杂内容?"对应选一个,一分钟搞定。

http://www.jsqmd.com/news/1180482/

相关文章:

  • SourceTree实战指南——Git可视化管理从入门到精通
  • 深耕汽配供应链 16 载,义乌福玉汽车用品商行打造全场景汽车养护综合服务商 - GrowthUME
  • 济南闲置黄金变现口碑红榜多家机构横向测评,收的顶无隐形扣费保值首选 - 小蝶回收测评
  • 打破SPT-AKI存档限制:终极角色编辑器让你的离线塔科夫体验焕然一新
  • 探索Python射频分析:scikit-rf实战进阶指南
  • Fluent电化学模块电解制氢仿真:核心设置与报错排查指南
  • Linux下Tomcat部署与性能调优实战指南
  • Unity游戏实时文本翻译:XUnity.AutoTranslator与BepInEx实战指南
  • AD5593R与PIC18LF45K42的混合信号系统设计实战
  • GEO内容多久需要更新一次?半年前的文章为什么权重下降
  • EulerCopilot无网络环境部署完整教程:离线环境下的操作系统智能问答终极解决方案
  • SystemVerilog Interface 对比传统连接:5个关键优势与3个典型应用场景分析
  • 模板驱动型文档自动化:零代码实现专业文档批量生成
  • 数字滤波器设计---FIR 滤波器设计
  • Squid 3.5.20 正向代理配置:CentOS 7.6 下 3 步完成基础部署与端口修改
  • 如何应对AIGC检测:从原理到实践的降重策略
  • 【LGR-290-Div.4】 ARC224 CF2246
  • 邯郸黄金回收实测:六家门店报价透明无套路 - 余生黄金回收
  • 架构师如何做技术分享:让知识流动起来
  • 如何快速掌握RVC变声器:AI语音克隆完全指南
  • 深入解析MySQL连接中断:从“Expected to read 4 bytes, read 0 bytes”错误到连接池优化
  • 《Dockerfile语法精讲》-- 从指令到实战,构建高效容器镜像
  • 步进电机3大核心参数选型指南:以28BYJ-48与57HS为例对比静转矩与步距角
  • 【Linux】lsof命令实战:从网络连接到文件恢复的深度排查指南
  • 遗传算法工程化:从早熟收敛到可控演化的实战指南
  • 架构师面试指南:如何回答架构设计问题
  • 副业开店指南!抖店店群完整上货流程:选品采集、合规检测、一键发布分步教学 - 抖掌柜
  • 2026 汉中靠谱装修公司排行榜实测解析,本地正规装企推荐(实地走访 + 工地核验 + 业主回访) - 装修新知
  • VS Code Java Extension Pack 1.0:3步配置外部JAR依赖,打包可执行JAR实战
  • 多模型推理 Pipeline 的性能优化——批处理、模型并行与响应缓存