0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

深入浅出学习eTs之电量不足提示弹窗实例

Harmony&嵌入式学习 来源:Harmony&嵌入式学习 作者:Harmony&嵌入式学 2023-05-13 13:25 次阅读

本项目Gitee仓地址:深入浅出eTs学习: 带大家深入浅出学习eTs (gitee.com)

一、需求分析

wKgaomRfHz-AWHurAAJmQsDI0GA789.png

相信大家生活中也经常会遇到上方情况,本章节我们来模拟提示一个电量不足的显示,使用自定义弹窗来实现

提示电量不足

可以选择关闭和低电量模式

显示当前剩余电量

二、控件介绍

自定义弹窗:官方文档

说明: 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

通过CustomDialogController类显示自定义弹窗。

接口

CustomDialogController(value:{builder: CustomDialog, cancel?: () => void, autoCancel?: boolean, alignment?: DialogAlignment, offset?: Offset, customStyle?: boolean})

参数

参数名 参数类型 必填 默认值 参数描述
builder CustomDialog - 自定义弹窗内容构造器。
cancel () => void - 点击遮障层退出时的回调。
autoCancel boolean true 是否允许点击遮障层退出。
alignment DialogAlignment DialogAlignment.Default 弹窗在竖直方向上的对齐方式。
offset { dx: Length | Resource, dy: Length | Resource } - 弹窗相对alignment所在位置的偏移量。
customStyle boolean false 弹窗容器样式是否自定义。
gridCount8+ number - 弹窗宽度占栅格宽度的个数。

DialogAlignment枚举说明

名称 描述
Top 垂直顶部对齐。
Center 垂直居中对齐。
Bottom 垂直底部对齐。
Default 默认对齐。
TopStart8+ 左上对齐。
TopEnd8+ 右上对齐。
CenterStart8+ 左中对齐。
CenterEnd8+ 右中对齐。
BottomStart8+ 左下对齐。
BottomEnd8+ 右下对齐。

代码介绍:

declare class CustomDialogController {
  constructor(value: CustomDialogControllerOptions); // 对话框控制器,控制弹框样式等
  open();                                            // 打开对话框
  close();                                           // 关闭对话框
}

// 配置参数的定义
declare interface CustomDialogControllerOptions {
  builder: any;                                      // 弹框构造器
  cancel?: () => void;                               // 点击蒙层的事件回调
  autoCancel?: boolean;                              // 点击蒙层是否自动消失
  alignment?: DialogAlignment;                       // 弹框在竖直方向上的对齐方式
  offset?: Offset;                                   // 根据alignment的偏移
  customStyle?: boolean;                             // 是否是自定义样式
  gridCount?: number;                                // grid数量
}

CustomDialogController

导入对象

dialogController : CustomDialogController = new CustomDialogController(value:{builder: CustomDialog, cancel?: () => void, autoCancel?: boolean})

open()

open(): void

显示自定义弹窗内容,若已显示,则不生效。

close

close(): void

关闭显示的自定义弹窗,若已关闭,则不生效。

三、UI设计

(1)弹窗实现

本章节的UI设计特别简单,仅需要实现一个弹窗即可

开介绍,我们需要在@Entry外进行定义,定义类型是@CustomDialog,其基本结构如下(官网)

@CustomDialog
struct CustomDialogExample {
  controller: CustomDialogController
  cancel: () => void
  confirm: () => void

  build() {
    Column() {
      Text('Software uninstall').width('70%').fontSize(20).margin({ top: 10, bottom: 10 })
      Image($r('app.media.icon')).width(80).height(80)
      Text('Whether to uninstall a software?').fontSize(16).margin({ bottom: 10 })
      Flex({ justifyContent: FlexAlign.SpaceAround }) {
        Button('cancel')
          .onClick(() => {
            this.controller.close()
            this.cancel()
          }).backgroundColor(0xffffff).fontColor(Color.Black)
        Button('confirm')
          .onClick(() => {
            this.controller.close()
            this.confirm()
          }).backgroundColor(0xffffff).fontColor(Color.Red)
      }.margin({ bottom: 10 })
    }
  }
}

通过上面的程序可以实现下面的效果

wKgZomRfHz-Abk_WAAZeSwTl3AM866.gif

我们需要对内容和格式进行修改

@CustomDialog
struct CustomBatteryDialog  {
  controller: CustomDialogController
  cancel: () => void
  confirm: () => void

  build() {
    Stack() {
      Column() {
        Text('电池电量不足')
          .fontSize(22)
          .margin({top: 15})
          .fontColor(Color.Black)
        Text('还剩20%电量')
          .fontSize(17)
          .margin({top: 15})
          .fontColor(Color.Red)
        Text()
          .size({width: "100%", height: "2px"})
          .backgroundColor("#bebbc1")
          .margin({top: 15})
        Row() {
          Text("关闭")
            .height("100%")
            .layoutWeight(1)
            .textAlign(TextAlign.Center)
            .fontSize(20)
            .fontColor("#317ef5")
            .onClick(() => {
              this.controller.close(); // 关闭弹窗
            })
          Text()
            .size({width: "2px", height: "100%"})
            .backgroundColor("#bebbc1")
          Text("低电量模式")
            .textAlign(TextAlign.Center)
            .fontSize(20)
            .fontColor("#317ef5")
            .height("100%")
            .layoutWeight(1)
            .onClick(() => {
              this.controller.close(); // 关闭弹窗
            })
        }
        .height(45)
        .width('100%')
      }
      .backgroundColor("#e6ffffff")
      .borderRadius(20)
    }
    .padding({left: 40, right: 40})
    .width("100%")
  }
}

实现效果如下:

wKgaomRfH0CABhXaAABA8VSXUfw733.png

(2)弹窗调用

弹窗调用的函数为this.controller.open(),一般是通过给定事件,像点击按钮或者之类,我们这里选择使用直接弹窗的形式(打开APP就弹窗)

使用到函数为onPageShow(),其位置在该位置:

@Entry 
@Component 
struct Index {

  onPageShow() {
    this.controller.open()

  }

  build() {

  }
}

四、系统演示

wKgZomRfH0CAYKHeAAGNHenO-TQ540.gif

已实现效果,如上图所示。

编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ets
    ets
    +关注

    关注

    0

    文章

    20

    浏览量

    1619
  • OpenHarmony
    +关注

    关注

    25

    文章

    3716

    浏览量

    16260
收藏 人收藏

    评论

    相关推荐

    #深入浅出学习eTs#(八)“猜大小”小游戏

    本项目Gitee仓地址:[深入浅出eTs学习: 带大家深入浅出学习eTs (gitee.com)
    的头像 发表于 05-17 15:08 1018次阅读
    #<b class='flag-5'>深入浅出</b><b class='flag-5'>学习</b><b class='flag-5'>eTs</b>#(八)“猜大小”小游戏

    #深入浅出学习eTs#(十)蓝药丸还是红药丸

    本项目Gitee仓地址: 深入浅出eTs学习: 带大家深入浅出学习eTs (gitee.com)
    的头像 发表于 05-17 15:07 949次阅读
    #<b class='flag-5'>深入浅出</b><b class='flag-5'>学习</b><b class='flag-5'>eTs</b>#(十)蓝药丸还是红药丸

    ARM7 深入浅出学习

    深入浅出ARM7 LPC213x_214 学习
    发表于 12-04 17:28

    深入浅出排序学习使用指南

    深入浅出排序学习:写给程序员的算法系统开发实践
    发表于 09-16 11:38

    #深入浅出学习eTs#(一)模拟器/真机环境搭建

    本项目的Gitee仓地址: 深入浅出eTs学习: 带大家深入浅出学习eTs (gitee.com
    发表于 12-24 13:02

    #深入浅出学习eTs#(二)拖拽式UI

    本项目Gitee仓地址:深入浅出eTs学习: 带大家深入浅出学习eTs (gitee.com)一
    发表于 12-29 09:56

    #深入浅出学习eTs#(七)判断密码是否正确

    本项目Gitee仓地址:深入浅出eTs学习: 带大家深入浅出学习eTs (gitee.com)一
    发表于 12-29 10:06

    #深入浅出学习eTs#(十二)您的电量不足

    本项目Gitee仓地址:深入浅出eTs学习: 带大家深入浅出学习eTs (gitee.com)一
    发表于 12-29 13:50

    深入浅出Cortex-M0学习资料

    深入浅出Cortex-M0学习资料
    发表于 06-18 10:50 0次下载
    <b class='flag-5'>深入浅出</b>Cortex-M0<b class='flag-5'>学习</b>资料

    STM32深入浅出新手篇

    STM32深入浅出新手篇,很好的单片机学习资料。
    发表于 03-21 17:43 128次下载

    深入浅出学习250个通信原理资源下载

    深入浅出学习250个通信原理资源下载
    发表于 04-12 09:16 28次下载

    深入浅出学习低功耗蓝牙协议栈

    深入浅出学习低功耗蓝牙协议栈
    发表于 06-23 10:35 57次下载

    深入浅出学习eTs(一)模拟器/真机环境搭建

    本项目的Gitee仓地址: 深入浅出eTs学习: 带大家深入浅出学习eTs (gitee.com
    的头像 发表于 05-13 13:17 1671次阅读
    <b class='flag-5'>深入浅出</b><b class='flag-5'>学习</b><b class='flag-5'>eTs</b>(一)模拟器/真机环境搭建

    深入浅出学习eTs(七)如何判断密码是否正确

    本项目Gitee仓地址: 深入浅出eTs学习: 带大家深入浅出学习eTs (gitee.com)
    的头像 发表于 05-13 13:20 908次阅读
    <b class='flag-5'>深入浅出</b><b class='flag-5'>学习</b><b class='flag-5'>eTs</b>(七)如何判断密码是否正确

    深入浅出学习eTs九宫格密码锁功能实现

    本项目Gitee仓地址:深入浅出eTs学习: 带大家深入浅出学习eTs (gitee.com)
    的头像 发表于 05-13 13:25 1564次阅读
    <b class='flag-5'>深入浅出</b><b class='flag-5'>学习</b><b class='flag-5'>eTs</b><b class='flag-5'>之</b>九宫格密码锁功能实现