HarmonyOS Next 弹窗系列教程(2)

news2025/6/6 10:31:19

HarmonyOS Next 弹窗系列教程(2)

上一章节我们讲了自定义弹出框 (openCustomDialog),那对于一些简单的业务场景,不一定需要都是自定义,也可以使用 HarmonyOS Next 内置的一些弹窗效果。比如:

名称描述
不依赖 UI 组件的自定义弹出框 (openCustomDialog)当用户需要在自定义弹出框内动态更新弹出框属性时使用。
基础自定义弹出框-不推荐 (CustomDialog)当用户需要自定义弹出框内的组件和内容时使用。
警告弹窗 (AlertDialog)固定样式,通常用来展示用户当前需要或必须关注的信息或操作。如用户操作一个敏感行为时响应一个二次确认的弹出框。
列表选择弹窗 (ActionSheet)固定样式,当用户需要关注或确认的信息存在列表选择时使用。
选择器弹窗 (PickerDialog)固定样式,当用户需要在弹出框内选择日期、时间和文本时使用。
对话框 (showDialog)固定样式,当用户需要对在弹出框响应后异步返回结果进行处理时使用。
操作菜单 (showActionMenu)固定样式,当用户需要对在操作菜单响应后异步返回结果进行处理时使用。

警告弹窗 (AlertDialog)

需要向用户提问或得到用户的许可时,可使用警告弹窗。

  • 警告弹窗用来提示重要信息,但会中断当前任务,尽量提供必要的信息和有用的操作。
  • 避免仅使用警告弹窗提供信息,用户不喜欢被信息丰富但不可操作的警告打断。

警告弹窗通过 UIContext 中的showAlertDialog接口实现。

效果:

PixPin_2024-12-26_22-47-38

示例代码

根据上述的效果,我们发现需要配置的内容其实不少的:

  1. title 标题
  2. message 对话框显示的消息内容
  3. alignment 对话框在屏幕中的对齐方式
  4. offset 对话框相对于默认位置的偏移量
  5. gridCount 对话框内按钮布局的网格数量
  6. transition 对话框的过渡效果设置
  7. buttons 对话框的按钮配置数组
@Entry
@Component
struct showAlertDialogExample {
  build() {
    Column() {
      Button('showAlertDialog')// 设置按钮的外边距为30,具体单位可能根据框架默认设置(通常是像素相关单位)
        .margin(30)
        .onClick(() => {
          // 获取UI上下文环境,用于显示警告对话框
          this.getUIContext().showAlertDialog(
            {
              // 对话框的标题
              title: 'title',
              // 对话框显示的消息内容
              message: 'text',
              // 设置对话框是否能自动取消,这里设置为true表示可以自动取消
              autoCancel: true,
              // 对话框在屏幕中的对齐方式,这里设置为居中对齐
              alignment: DialogAlignment.Center,
              // 对话框相对于默认位置的偏移量,这里dx为0,dy为 -20,具体单位依框架而定
              offset: { dx: 0, dy: -20 },
              // 对话框内按钮布局的网格数量,此处设置为3(具体作用根据框架而定)
              gridCount: 3,
              // 对话框的过渡效果设置,通过组合不同的过渡效果来实现复杂的显示和隐藏动画
              transition: TransitionEffect.asymmetric(
                TransitionEffect.OPACITY.animation({ duration: 3000, curve: Curve.Sharp }).combine(
                  TransitionEffect.scale({ x: 1.5, y: 1.5 }).animation({ duration: 3000, curve: Curve.Sharp })
                ),
                TransitionEffect.OPACITY.animation({ duration: 100, curve: Curve.Smooth }).combine(
                  TransitionEffect.scale({ x: 0.5, y: 0.5 }).animation({ duration: 100, curve: Curve.Smooth })
                )
              ),
              // 对话框的按钮配置数组,定义了对话框中显示的按钮及其相应的行为
              buttons: [{
                // 按钮显示的值,这里是'cancel'
                value: 'cancel',
                // 点击该按钮时执行的回调函数,这里在控制台输出相应提示信息
                action: () => {
                  console.info('Callback when the first button is clicked')
                }
              },
                {
                  // 设置按钮是否可用,这里设置为true表示可用
                  enabled: true,
                  // 设置按钮是否默认获得焦点,这里设置为true表示默认获得焦点
                  defaultFocus: true,
                  // 设置按钮的样式,这里采用高亮样式
                  style: DialogButtonStyle.HIGHLIGHT,
                  // 按钮显示的值,这里是'ok'
                  value: 'ok',
                  // 点击该按钮时执行的回调函数,同样在控制台输出相应提示信息
                  action: () => {
                    console.info('Callback when the second button is clicked')
                  }
                }],
            }
          )
        })
    }
    .width('100%')
    .margin({ top: 5 })
  }
}

参考 API

实际开发中,根据官网api来调整代码 即可

列表选择弹窗 (ActionSheet)

列表选择器弹窗适用于呈现多个操作选项,尤其当界面中仅需展示操作列表而无其他内容时。

列表选择器弹窗通过 UIContext 中的showActionSheet接口实现。

效果:

PixPin_2024-12-26_23-04-25

示例代码

列表选择弹窗相比较于警告弹窗,重要的两个地方不一样了

  1. showActionSheet:用于展示操作表(Action Sheet)
  2. sheets:操作表中各个选项(Sheet)的配置数组,每个选项包含标题以及点击时执行的动作(回调函数)
@Entry
@Component
struct showActionSheetExample {
  build() {
    Column() {
      Button('showActionSheet')
        .margin(30)
        .onClick(() => {
          // 通过获取UI上下文来调用showActionSheet方法,用于展示操作表(Action Sheet)
          this.getUIContext().showActionSheet({
            // 操作表的标题
            title: 'ActionSheet title',
            // 操作表显示的提示消息内容
            message: 'message',
            // 设置操作表是否能自动取消,这里设置为false,表示不会自动取消,需用户手动操作来关闭
            autoCancel: false,
            // 操作表的宽度,单位通常与UI框架默认的尺寸单位一致,这里设置为300(可能是像素等)
            width: 300,
            // 操作表的高度,单位同理,这里设置为300
            height: 300,
            // 操作表的圆角半径大小,用于设置其外观的圆润程度,这里是20(单位与整体尺寸单位一致)
            cornerRadius: 20,
            // 操作表边框的宽度,这里设置为1(单位与尺寸单位一致)
            borderWidth: 1,
            // 边框的样式,这里设置为实线(Solid),是BorderStyle枚举类型中的一种表示方式
            borderStyle: BorderStyle.Solid,
            // 边框的颜色,这里设置为蓝色(Color.Blue应该是框架预定义的颜色表示)
            borderColor: Color.Blue,
            // 操作表的背景颜色,设置为白色(Color.White同样是框架预定义颜色)
            backgroundColor: Color.White,
            // 操作表的过渡效果设置,通过组合不同的过渡动画效果来实现显示和隐藏时的动画表现
            transition: TransitionEffect.asymmetric(
              TransitionEffect.OPACITY.animation({ duration: 3000, curve: Curve.Sharp }).combine(
                TransitionEffect.scale({ x: 1.5, y: 1.5 }).animation({ duration: 3000, curve: Curve.Sharp })
              ),
              TransitionEffect.OPACITY.animation({ duration: 100, curve: Curve.Smooth }).combine(
                TransitionEffect.scale({ x: 0.5, y: 0.5 }).animation({ duration: 100, curve: Curve.Smooth })
              )
            ),
            // 操作表的确认按钮相关配置,包含按钮显示的值以及点击按钮时执行的回调函数
            confirm: {
              value: 'Confirm button',
              action: () => {
                console.info('Get Alert Dialog handled')
              }
            },
            // 操作表在屏幕中的对齐方式,这里设置为居中对齐(DialogAlignment.Center是框架预定义的对齐方式枚举值)
            alignment: DialogAlignment.Center,
            // 操作表中各个选项(Sheet)的配置数组,每个选项包含标题以及点击时执行的动作(回调函数)
            sheets: [
              {
                title: 'apples',
                action: () => {
                }
              },
              {
                title: 'bananas',
                action: () => {
                }
              },
              {
                title: 'pears',
                action: () => {
                  console.log('pears')
                }
              }
            ]
          })
        })
    }
    .width('100%')
    .margin({ top: 5 })
  }
}

参考 API

链接

对话框 (showDialog)

对话框弹窗在日常使用中的频率非常高,比如 是否删除、是否弹出、确认支付等等场景。一般提供两个选择给用户,取消或者确定。

效果:

PixPin_2024-12-26_23-35-30

示例代码

@Entry
@Component
struct Index {
  build() {
    Column() {
      Button("showDialog")
        .margin(20)
        .onClick(() => {
          let uiContext = this.getUIContext();
          let promptAction = uiContext.getPromptAction();
          promptAction.showDialog({
            // 设置对话框的标题为'showDialog Title Info',
            title: 'showDialog Title Info',
            // 设置对话框中要显示的消息内容为'Message Info',
            message: 'Message Info',
            // 配置对话框中要显示的按钮数组,
            buttons: [
              {
                text: 'button1',
                color: '#000000'
              },
              {
                text: 'button2',
                color: '#000000'
              }
            ]
          }, (err, data) => {
            if (err) {
              console.error('showDialog err: ' + err);
              return;
            }
            console.info('showDialog success callback, click button: ' + data.index);
          });
        })
    }
    .width('100%')
  }
}

参考 API

链接

操作菜单 (showActionMenu)

操作菜单的功能比较明显,就是弹出一个弹窗,内容是类似一些菜单提供用户选择。

效果

PixPin_2024-12-26_23-49-33

示例代码

@Entry
@Component
struct Index {
  build() {
    Column() {
      Button("showDialog")
        .margin(20)
        .onClick(() => {

          let uiContext = this.getUIContext();
          let promptAction = uiContext.getPromptAction();
          promptAction.showActionMenu({
            title: 'showActionMenu Title Info',
            buttons: [
              {
                text: 'item1',
                color: '#666666'
              },
              {
                text: 'item2',
                color: '#000000'
              },
            ]
          })
            .then(data => {
              console.info('showActionMenu success, click button: ' + data.index);
            })

        })
    }
    .width('100%')
  }
}

参考 API

链接

总结

在实际开发中,可以优先针对适合的场景来选择合适的弹窗

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中小企业搭建网站选择虚拟主机还是云服务器?华为云有话说

这是一个很常见的问题,许多小企业在搭建网站时都会面临这个选择。虚拟主机和云服务器都有各自的优缺点,需要根据自己的需求和预算来决定。 虚拟主机是指将一台物理服务器分割成多个虚拟空间,每个空间都可以运行一个网站。虚拟主机的优点是价格…

使用 HTML + JavaScript 在高德地图上实现物流轨迹跟踪系统

在电商行业蓬勃发展的今天,物流信息查询已成为人们日常生活中的重要需求。本文将详细介绍如何基于高德地图 API 利用 HTML JavaScript 实现物流轨迹跟踪系统的开发。 效果演示 项目概述 本项目主要包含以下核心功能: 地图初始化与展示运单号查询功能…

19-项目部署(Linux)

Linux是一套免费使用和自由传播的操作系统。说到操作系统,大家比较熟知的应该就是Windows和MacOS操作系统,我们今天所学习的Linux也是一款操作系统。 我们作为javaEE开发工程师,将来在企业中开发时会涉及到很多的数据库、中间件等技术&#…

html基础01:前端基础知识学习

html基础01&#xff1a;前端基础知识学习 1.个人建立打造 -- 之前知识的小总结1.1个人简历展示1.2简历信息填写页面 1.个人建立打造 – 之前知识的小总结 1.1个人简历展示 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8&qu…

【RoadRunner】自动驾驶模拟3D场景构建 | 软件简介与视角控制

&#x1f4af; 欢迎光临清流君的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落 &#x1f4af; &#x1f525; 个人主页:【清流君】&#x1f525; &#x1f4da; 系列专栏: 运动控制 | 决策规划 | 机器人数值优化 &#x1f4da; &#x1f31f;始终保持好奇心&…

基于RK3576+FPGA芯片构建的CODESYS软PLC Linux实时系统方案,支持6T AI算力

基于RK3576芯片构建的CODESYS软PLC Linux实时系统方案&#xff0c;结合了异构计算架构与工业实时控制技术&#xff0c;主要特点如下&#xff1a; 一、硬件架构设计 ‌异构多核协同‌ ‌Cortex-A72四核‌&#xff08;2.3GHz&#xff09;&#xff1a;处理运动轨迹规划、AI视觉等…

适配器模式:让不兼容接口协同工作

文章目录 1. 适配器模式概述2. 适配器模式的分类2.1 类适配器2.2 对象适配器 3. 适配器模式的结构4. C#实现适配器模式4.1 对象适配器实现4.2 类适配器实现 5. 适配器模式的实际应用场景5.1 第三方库集成5.2 遗留系统集成5.3 系统重构与升级5.4 跨平台开发 6. 类适配器与对象适…

DDP与FSDP:分布式训练技术全解析

DDP与FSDP:分布式训练技术全解析 DDP(Distributed Data Parallel)和 FSDP(Fully Sharded Data Parallel)均为用于深度学习模型训练的分布式训练技术,二者借助多 GPU 或多节点来提升训练速度。 1. DDP(Distributed Data Parallel) 实现原理 数据并行:把相同的模型复…

【Spring AI 1.0.0】Spring AI 1.0.0框架快速入门(1)——Chat Client API

Spring AI框架快速入门 一、前言二、前期准备2.1 运行环境2.2 maven配置2.3 api-key申请 三、Chat Client API3.1 导入pom依赖3.2 配置application.properties文件3.3 创建 ChatClient3.3.1 使用自动配置的 ChatClient.Builder3.3.2 使用多个聊天模型 3.4 ChatClient请求3.5 Ch…

【笔记】在 MSYS2(MINGW64)中正确安装 Rust

#工作记录 1. 环境信息 Windows系统: MSYS2 MINGW64当前时间: 2025年6月1日Rust 版本: rustc 1.87.0 (17067e9ac 2025-05-09) (Rev2, Built by MSYS2 project) 2. 安装步骤 步骤 1: 更新系统包数据库并升级已安装的包 首先&#xff0c;确保我们的 MSYS2 系统是最新状态。打…

从汇编的角度揭秘C++引用,豁然开朗

C中的引用是指已有对象的别名&#xff0c;可以通过该别名访问并修改被引用的对象。那么其背后的原理是什么呢&#xff1f;引用是否会带来额外的开销呢&#xff1f;我们从一段代码入手&#xff0c;来分析一下引用的本质。 #include <stdio.h> int main() {int a 10;int …

聊聊Tomato Architecture

序 本文主要研究一下Tomato Architecture Clean/Onion/Hexagonal/Ports&Adapters Architectures Clean Architecture clean architecture定义了四层结构&#xff0c;最内层是entities(enterprise business rules)&#xff0c;再往外是use cases(application business ru…

小白的进阶之路系列之十二----人工智能从初步到精通pytorch综合运用的讲解第五部分

在本笔记本中,我们将针对Fashion-MNIST数据集训练LeNet-5的变体。Fashion-MNIST是一组描绘各种服装的图像瓦片,有十个类别标签表明所描绘的服装类型。 # PyTorch model and training necessities import torch import torch.nn as nn import torch.nn.functional as F impor…

2025年06月03日Github流行趋势

项目名称&#xff1a;onlook 项目地址url&#xff1a;https://github.com/onlook-dev/onlook项目语言&#xff1a;TypeScript历史star数&#xff1a;12871今日star数&#xff1a;624项目维护者&#xff1a;Kitenite, drfarrell, spartan-vutrannguyen, apps/devin-ai-integrati…

【数据分析】基于Cox模型的R语言实现生存分析与生物标志物风险评估

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理生存分析画图输出图片其他标记物的分析总结系统信息介绍 分析生存数据与多种生物标志物之间的关系。它通过Cox比例风险模型来评估不同生物标志物…

使用nginx配置反向代理,负载均衡

首先啥叫反向代理 咋配置呢&#xff0c;那当然是在nginx目录下改conf文件了 具体咋改呢&#xff0c;那就新增一个新的server配置&#xff0c;然后在location里新增你想代理的服务器 实际上负载均衡也就是根据反向代理的思路来的&#xff0c;如下所示 配置的话实际上也与上…

从 iPhone 备份照片: 保存iPhone图片的5种方法

随着智能手机越来越融入我们的生活&#xff0c;我们的照片已成为我们设备上最有价值的数据形式之一。然而&#xff0c;iPhone内部存储空间仍然有限&#xff0c;因此我们需要将iPhone中的照片备份到另一个地方&#xff0c;以释放空间并确保珍贵的图像记忆的安全。阅读本指南&…

Spring Ai 从Demo到搭建套壳项目(一)初识与实现与deepseek对话模式

前言 为什么说Java长青&#xff0c;主要是因为其生态圈完善&#xff0c;Spring又做了一款脚手架&#xff0c;把对接各个LLM厂商的sdk做了一遍&#xff0c;形成一系列的spring-ai-starter-** 的依赖。 目前为止版本去到1.0.0.M6&#xff0c;golang跟不上了吧&#xff0c; Make …

快速上手pytest

1. pytest的基础 1.1 什么是pytest pytest 是 python 中的一个测试框架&#xff0c;用于编写简洁、可扩展的测试代码&#xff0c;帮助开发者验证结果是否与预期相符。 python 中有很多的测试框架&#xff0c;那我们为什么要学习 pytest 呢&#xff1f; pytest 的优势&…

设备驱动与文件系统:02 键盘

操作系统中键盘驱动的讲解 在这一讲中&#xff0c;我将为大家讲解键盘相关内容。从上一讲开始&#xff0c;我们进入了操作系统第四个部分的学习&#xff0c;也就是操作系统对设备的驱动与管理。 上一讲我们探讨的是显示器&#xff0c;并且提到&#xff0c;一个终端设备是由显示…