一、介绍

本篇 Codelab 主要基于 dialog 和 button 组件,实现弹窗的几种自定义效果,具体效果有:

1.  警告弹窗,点击确认按钮弹窗关闭。

2.  确认弹窗,点击取消按钮或确认按钮,触发对应操作。

3.  加载弹窗,展示加载中效果。

4.  提示弹窗,支持用户输入内容,点击取消和确认按钮,触发对应操作。

5.  进度条弹窗,展示进度条以及百分比。

相关概念

dialog组件:自定义弹窗容器组件。

button组件:按钮组件。

完整示例

gitee源码地址

源码下载

弹窗基本使用(JS).zip

二、环境搭建

我们首先需要完成 HarmonyOS 开发环境搭建,可参照如下步骤进行。

软件要求

DevEco Studio版本:DevEco Studio 3.1 Release。

HarmonyOS SDK版本:API version 9。

硬件要求

设备类型:华为手机或运行在 DevEco Studio 上的华为手机设备模拟器。

HarmonyOS 系统:3.1.0 Developer Release。

环境搭建

1.  安装 DevEco Studio,详情请参考下载和安装软件

2.  设置 DevEco Studio 开发环境,DevEco Studio 开发环境需要依赖于网络环境,需要连接上网络才能确保工具的正常使用,可以根据如下两种情况来配置开发环境:

● 如果可以直接访问 Internet,只需进行下载HarmonyOS SDK操作。

● 如果网络不能直接访问 Internet,需要通过代理服务器才可以访问,请参考配置开发环境

3.  开发者可以参考以下链接,完成设备调试的相关配置:

● 使用真机进行调试

● 使用模拟器进行调试

三、代码结构解读

本篇 Codelab 只对核心代码进行讲解,对于完整代码,我们会在源码下载或 gitee 中提供。

├──entry/src/main/js	     // 代码区
│ └──MainAbility
│ ├──common
│ │ └──images // 图片资源
│ ├──i18n // 国际化中英文
│ │ ├──en-US.json
│ │ └──zh-CN.json
│ ├──pages
│ │ └──index
│ │ ├──index.css // 页面整体布局以及弹窗样式
│ │ ├──index.hml // 自定义弹窗展示页面
│ │ └──index.js // 弹窗显示关闭逻辑以及动画逻辑
│ └──app.js // 程序入口
└──entry/src/main/resources // 应用资源目录

四、构建应用页面

界面主要包括按钮列表页和自定义弹窗两部分,我们可以通过在 dialog 标签中添加自定义组件设置弹窗,具体效果如图所示:

首先搭建 index.hml 中的按钮页,主要包括 5 种常见的弹窗,分别为 AlertDialog、ConfirmDialog、LoadingDialog、PromptDialog 以及 ProgressDialog。

<!--index.hml-->
<div class="btn-div">
<button type="capsule" value="AlertDialog" class="btn" onclick="showAlert"></button>
<button type="capsule" value="ConfirmDialog" class="btn" onclick="showConfirm"></button>
<button type="capsule" value="LoadingDialog" class="btn" onclick="showLoading"></button>
<button type="capsule" value="PromptDialog" class="btn" onclick="showPrompt"></button>
<button type="capsule" value="ProgressDialog" class="btn" onclick="showProgress"></button>
</div>

  

然后在 index.hml 中创建 AlertDialog 自定义弹窗,效果如图所示:

<!-- index.hml -->
<!-- AlertDialog自定义弹窗 -->
<dialog id="alertDialog" class="alert-dialog">
<div class="dialog-div">
<div class="alert-inner-txt">
<text class="txt">AlertDialog</text>
</div>
<div class="alert-inner-btn">
<button class="btn-single" type="capsule" value="Confirm"
onclick="confirmClick('alertDialog')"></button>
</div>
</div>
</dialog>

  

创建 ConfirmDialog 自定义弹窗,效果如图所示:

<!-- index.hml -->
<!-- ConfirmDialog自定义弹窗 -->
<dialog id="confirmDialog" class="dialog-main">
<div class="dialog-div">
<div class="inner-txt">
<text class="txt">ConfirmDialog</text>
</div>
<div class="inner-btn">
<button type="capsule" value="Cancel" class="btn-txt-left"
onclick="cancelClick('confirmDialog')"></button>
<button type="capsule" value="Confirm" class="btn-txt-right"
onclick="confirmClick('confirmDialog')"></button>
</div>
</div>
</dialog>

  

创建 LoadingDialog 自定义弹窗,效果如图所示:

<!-- index.hml -->
<!-- LoadingDialog自定义弹窗 -->
<dialog id="loadingDialog" class="low-height-dialog">
<div class="dialog-loading">
<text>Loading...</text>
<image class="loading-img img-rotate" id="loading-img"
src="/common/images/ic_loading.svg"></image>
</div>
</dialog>

  

创建 PromptDialog 自定义弹窗,效果如图所示:

<!-- index.hml -->
<!-- PromptDialog自定义弹窗 -->
<dialog id="promptDialog" class="dialog-prompt">
<div class="dialog-div-prompt">
<div class="inner-txt-prompt">
<text class="txt">PromptDialog</text>
</div>
<input class="prompt-input" type="password" placeholder="please enter password"></input>
<div class="inner-btn">
<button type="capsule" value="Cancel" class="btn-txt-left"
onclick="cancelClick('promptDialog')"></button>
<button type="capsule" value="Confirm" class="btn-txt-right"
onclick="confirmClick('promptDialog')"></button>
</div>
</div>
</dialog>

  

创建 ProgressDialog 自定义弹窗,效果如图所示:

<!-- index.hml -->
<!-- ProgressDialog自定义弹窗 -->
<dialog id="progressDialog" class="low-height-dialog" oncancel="onCancel">
<div class="dialog-progress-div">
<div class="inner-txt-progress">
<text class="download-txt">Downloading...</text>
<text>{{ percent + '%' }}</text>
</div>
<div class="progress-div">
<progress class="min-progress" type="horizontal" percent="{{ percent }}"
secondarypercent="50"></progress>
</div>
</div>
</dialog>

  

然后在 index.js 文件中实现不同 button 的点击事件,展示对应自定义弹窗:

// index.js
export default {
data: {...}, // 展示AlertDialog
showAlert() {
this.$element('alertDialog').show();
}, // 展示ConfirmDialog
showConfirm() {
this.$element('confirmDialog').show();
}, // 展示LoadingDialog
showLoading() {
...
this.animation = this.$element('loading-img').animate(frames, options);
this.animation.play();
this.$element('loadingDialog').show();
}, // 展示PromptDialog
showPrompt() {
this.$element('promptDialog').show();
}, // 展示ProgressDialog
showProgress() {
...
}
}

  

五、总结

您已经完成了本次 Codelab 的学习,并了解到以下知识点:

1.  dialog 自定义弹窗容器组件的使用。

2.  button 按钮组件的使用。

HarmonyOS Codelab样例—弹窗基本使用的更多相关文章

  1. OpenHarmony 3.1 Beta 样例:使用分布式菜单创建点餐神器

    (以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 刘丽红 随着社会的进步与发展,科技手段的推陈出新,餐饮行业也在寻求新的突破与变革,手机扫描二维码点餐系统已经成为餐饮行 ...

  2. C++的性能C#的产能?! - .Net Native 系列《三》:.NET Native部署测试方案及样例

    之前一文<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥> 获得很多朋友支持和鼓励,也更让我坚定做这项技术的推广者,希望能让更多的朋友了解这项技术,于是先从官方 ...

  3. MarkDown+LaTex 数学内容编辑样例收集

    $\color{green}{MarkDown+LaTex 数学内容编辑样例收集}$ 1.大小标题的居中,大小,颜色 [例1] $\color{Blue}{一元二次方程根的分布}$ $\color{R ...

  4. 33个超级有用必须要收藏的PHP代码样例

    作为一个正常的程序员,会好几种语言是十分正常的,相信大部分程序员也都会编写几句PHP程序,如果是WEB程序员,PHP一定是必备的,即使你没用开发过大型软件项目,也一定多少了解它的语法. 在PHP的流行 ...

  5. 关于peersim样例配置文件的超详细解读(新手勿喷)

    相信很多兄弟一开始接触peersim,对配置文件还是有点不适应,我看了好久的样例的配置文件,一层层去找对应的文件的方法,终于好像悟懂了一点,记下来以后回顾. 贴上代码,一点点分析. 首先要说下所谓的配 ...

  6. hdu 1003 MAX SUM 简单的dp,测试样例之间输出空行

    测试样例之间输出空行,if(t>0) cout<<endl; 这样出最后一组测试样例之外,其它么每组测试样例之后都会输出一个空行. dp[i]表示以a[i]结尾的最大值,则:dp[i ...

  7. CloudSim样例分析

    自带八个样例描述: cloudsim-2.1.1\examples目录下提供了一些CloudSim样例程序,每个样例模拟的环境如下: (1)CloudSimExample1.Java:创建一个一台主机 ...

  8. 样例20-汽车SHOW

    观看样例点这里 素材下载 1.设置场景大小为400*3002.执行:文件->导入->导入到库,选择需要的汽车图片文件,将其导入到库面板中3.按照同样的方式,在库面板中导入所需的背景音乐文件 ...

  9. java使用xsd校验xml样例

    知识点:XSD文件是指XML结构定义 ( XML Schemas Definition )文件,是DTD的替代品.可以用一个指定的XML Schema来验证某个XML文档,以检查该XML文档是否符合其 ...

  10. java servlet 代码样例 (demo)

    今天又搞了下jsp +servlet 的代码样例,感觉虽然搭了好多次,可是每次还是不记得那些参数,都要去网上搜索,索性自己把这次的简单demo给记录下来,供下次使用的时候直接复制吧. 这个web逻辑 ...

随机推荐

  1. 【Azure 事件中心】Flink消费Event Hub中事件, 使用Azure默认示例代码,始终获取新产生的事件,如何消费旧事件呢?

    问题描述 根据Azure Event Hub示例文档,[将 Apache Flink 与适用于 Apache Kafka 的 Azure 事件中心配合使用],配置好 consumer.config 文 ...

  2. 【Azure 应用服务】App Service 默认开放端口说明, 如何禁用Web app的端口号? 

    问题描述 基于安全的角度来考虑,在网站上线之前用户会对自己的网站进行安全扫描,以防网站因为某些漏洞而被非法攻击. 而在扫描过程中,会发现除了 80 和 443 之外的一些其他端口也被开放了.例如:45 ...

  3. 从 Neo4j 导入 Nebula Graph 实践见 SPark 数据导入原理

    本文主要讲述如何使用数据导入工具 Nebula Graph Exchange 将数据从 Neo4j 导入到 Nebula Graph Database.在讲述如何实操数据导入之前,我们先来了解下 Ne ...

  4. Java 封装+构造器+this 小测试

    1 package com.bytezero.account; 2 3 4 public class Account 5 { 6 private int id; //账号 7 private doub ...

  5. iMindMap 10 的使用体验 + 讯飞输入法 + windows防火墙 (完美)

    这个软件 最终的效果非常好. 但是有一个硬bug,就是输入光标 搜狗输入法和百度输入法,输入法获取不到,导致输入中文的时候,文字候选框位置特别远. 如果是纯英文 输入使用,就没有这个bug. 总结: ...

  6. 【数据结构】哈夫曼树与哈夫曼编码(Huffman Encoding)

    一.背景 编码是信息处理的基础(重新表示信息). 普通的编码是等长编码,例如7位的ASCIL编码,对出现频率不同的字符都使用相同的编码长度.但其在传输和存储等情况下编码效率不高. 可使用不等长编码,来 ...

  7. 基于BES2500芯片的方案开发总结和反思

    前记   虽然蓝牙芯片现在非常多,可是一旦想做一些差异化的产品时候,能用的非常少.在和客户的反复斟酌中,最终选择了BES2500来开发这款新的产品.这里面是基于自身的实力,产品定位和芯片诉求多重考量的 ...

  8. JavaFx 圆形头像实现

    原文:JavaFx 圆形头像实现 - Stars-One的杂货小窝 本文基于TornadoFx框架进行编写,封装工具代码是kotlin版本 圆形头像框组件封装成了stars-one/common-co ...

  9. [置顶] 彻底停止运行线程池ThreadPoolExecutor

    最近系统开发时遇到这样一个需求: 该功能执行时间很久,如果运行过程出现错误,也无法将其停止,必须眼睁睁的看着它浪费很久时间,除非停止服务器. 于是,我就想着如何给该功能加上一个"停止&quo ...

  10. GDB简洁指南

    启动gdb:gdb program 设置运行参数:set args 10 20 30 启动程序: run(r),start 显示源代码:list(l) 显示当前栈帧和运行行:frame(f) 设置显示 ...