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

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

3天内不再提示

鸿蒙ArkUI开发实战:制作一个【简单计数器】

jf_46214456 来源:jf_46214456 作者:jf_46214456 2024-04-08 18:05 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

构建第一个页面

  1. 使用文本组件
    工程同步完成后,在 Project 窗口,点击 entry > src > main > ets > pages ,打开 Index.ets 文件,可以看到页面由 RowColumnText 组件组成。 index.ets 文件的示例如下:

    @Entry @Component struct Index {
    
      @State message: string = 'Hello World'
    
      build() {
        Row() {
          Column() {
            Text(this.message)
              .fontSize(50)
              .fontWeight(FontWeight.Bold)
          }
          .width('100%')
        }
        .height('100%')
      }
    }
    

    @Entry 修饰符表示一个页面的入口,它需要在 main_pages.json 配置才可以在设备上正常显示, @Component 修饰符表示 Index 是一个组件, @State 是一个状态标识符,当它修饰的变量值改变时ArkUI开发框架会调用 build() 方法进行页面的刷新。

  2. 添加按钮
    在默认页面基础上,我们添加一个 Button 组件,作为按钮接受用户点击的动作,从而实现计数器自增操作。 " index.ets " 文件的示例如下:

    @Entry @Component struct Index {
    
      @State count: number = 0;                      // 状态数据
    
      build() {
        Stack({alignContent: Alignment.BottomEnd}) { // 堆叠式布局
          Text(this.count.toString())                // 显示文本
            .fontSize(50)                            // 文字大小
            .margin(50)                              // 外边距
            .size({width: '100%', height: '100%'})   // 控件大小
    
          Button('+')                                // 显示一个+按钮
            .size({width: 80, height: 80})           // 按钮大小
            .fontSize(50)                            // 按钮文字大小
            .onClick(() = > {                         // 按钮点击事件
              this.count++;                          // count累加,触发build()方法回调
            })
            .margin(50)
        }
        .width('100%')
        .height('100%')
      }
    }
    
  3. 打开预览器
    在编辑窗口右上角的侧边工具栏,点击 Previewer ,然后点击页面加号按钮,页面运行效果如下图所示:
    2_1_3_1
    学习文档参考:[docs.qq.com/doc/DUmN4VVhBd3NxdExK]

搜狗高速浏览器截图20240326151547.png

根据运行截图,我们点击了加号按钮,触发按钮的 onClick 事件回调,由于在回调里执行了 count++ 操作导致了 count 的值发生了改变,又因为 count 被 @State 修饰符修饰,所以ArkUI开发框架就会重新调用 build() 方法更新各组件的属性值, Text 组件会更新 count 的值,然后页面刷新,计数器的功能就实现了。

页面的构建流程

读者可能会对上述示例的页面刷新过程感兴趣,笔者简单介绍一下,上述示例的页面刷新过程可以分为两个过程,一个是页面渲染完毕没有点击按钮过程,另一个是点击点击按钮后页面数据变化过程,笔者分别介绍一下这两个过程:

  1. 页面初次显示过程
    ①、index.ets 源代码通过编译工具链编译为带有类型标志的目标文件,同时也包含了如何创建UI结构信息的指令流。
    ②、通过跨语言调用并生成了 C++ 层面的 Component 树(UI描述层)。
    ③、通过 Component 树进一步生成 Element 树。 Element 是 Component 的实例,表示一个具体的组件节点,它形成的 Element 树负责维持界面在整个运行时的树形结构,方便计算更新时的局部更新算法等。
    ④、对于每个可显示的 Element 都会为其创建对应的 RenderNode 。 RenderNode 负责一个节点的显示信息,它形成的 Render 树维护着整个界面渲染需要用到的信息,包括位置、大小、绘制命令等。后续的布局、绘制都是在 Render 树上进行的。
    ⑤、实现真正的渲染并显示绘制结果。
  2. 点击按钮显示过程
    ⑥、点击屏幕,事件传递到组件上,组件的 onClick 事件方法被触发执行。
    ⑦、由于 onClick 事件方法中 @State 修饰的变量值改变了,相应的 getter / setting 函数会被触发。
    ⑧、状态管理模块定位出与之关联的UI组件。
    ⑨、状态管理模块更新相应的 Element 树的信息。
    ⑩、状态管理模块更新相应的 RenderNode 树的渲染信息。
    ⑪、刷新界面并显示绘制结果。

以上页面整体构建流程如下图所示:

2_1_4

小结

通过简单计数器示例,读者先了解一下 OpenHarmony 应用的组件、页面布局,点击事件以及 @State 修饰符的作用,最后给简单介绍了一下 OpenHarmony 的页面构建流程。

审核编辑 黄宇

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

    关注

    32

    文章

    2306

    浏览量

    97652
  • 鸿蒙
    +关注

    关注

    60

    文章

    2865

    浏览量

    45398
  • OpenHarmony
    +关注

    关注

    31

    文章

    3928

    浏览量

    20740
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    国产频率计数器vs进口频率计数器

    计数器
    西安同步电子科技有限公司
    发布于 :2025年11月04日 17:55:01

    频率计数器/定时 时间间隔计数器的应用领域和范围的深度解析 频率计数器模块

    稳定性的核心优势,成为解决各时间测量需求的优选方案。 、集成化高精度时间测量单元 SYN5620A是款基于先进计时技术与数字信号处理算法开发的时间间隔计数器模块,专为需要精准测量两
    的头像 发表于 10-30 11:22 436次阅读
    频率<b class='flag-5'>计数器</b>/定时<b class='flag-5'>器</b> 时间间隔<b class='flag-5'>计数器</b>的应用领域和范围的深度解析 频率<b class='flag-5'>计数器</b>模块

    雷击计数器的种类和综合选型部署解决方案

    、雷击计数器的定义与作用 雷击计数器(Lightning Counter,又称雷电计数器、雷击记录仪)是安装在避雷针、接闪杆、SPD(浪涌保护
    的头像 发表于 09-11 15:28 584次阅读
    雷击<b class='flag-5'>计数器</b>的种类和综合选型部署解决方案

    Texas Instruments CD74HC4040/CD74HCT4040 12级二进制计数器数据手册

    Texas Instruments CD74HC4040/CD74HCT4040 12级二进制计数器是控制触发的高速计数器级。在每个输入脉冲的负时钟转换时,级的状态前进
    的头像 发表于 07-03 11:05 713次阅读
    Texas Instruments CD74HC4040/CD74HCT4040 12级二进制<b class='flag-5'>计数器</b>数据手册

    鸿蒙5开发宝藏案例分享---一多开发实例(音乐)

    各位开发者小伙伴们好呀!今天咱们来点硬核干货!最近在鸿蒙文档中心挖到座“金矿”——官方竟然暗藏了100+实战案例,从分布式架构到交互动效优化应有尽有!这些案例不仅藏着华为工程师的私房
    的头像 发表于 06-30 11:54 632次阅读

    ArkUI-X跨平台技术落地-华为运动健康()

    开发工作量以及保证体验致性,对于运动健康App而言,显得尤为重要。作为鸿蒙NEXT系统生态中的重要员,ArkUI-X框架是我们跨平台技术
    发表于 06-18 22:53

    鸿蒙5开发宝藏案例分享---性能体验设计

    ?** 鸿蒙性能优化宝藏指南:让你的应用丝滑如飞!** 大家好呀!最近在HarmonyOS文档里挖到性能优化的\"黄金矿脉\"——官方其实藏了超多流畅性设计的实战案例!但很多
    发表于 06-12 16:45

    雷电(雷击)计数器的原理、作用及行业应用解决方案

    安全事故。雷电(雷击)计数器作为防雷系统中的重要组成部分,扮演着“记录雷击事件、辅助安全运维”的关键角色,已经成为智能防雷系统中不可或缺的环。 二、雷电(雷击)计数器的原理 1. 工作原理 雷电
    的头像 发表于 06-12 15:14 790次阅读
    雷电(雷击)<b class='flag-5'>计数器</b>的原理、作用及行业应用解决方案

    鸿蒙5开发宝藏案例分享---一多开发实例(地图导航)

    ? 鸿蒙开发隐藏宝藏大公开!手把手教你玩转\"多\"地图导航案例 ? 大家好呀!我是你们的老朋友,今天要给大家扒鸿蒙官方文档里那些\"
    发表于 06-03 16:17

    KEYSIGHT是德科技53220A台式频率计计数器原安捷伦

    KEYSIGHT TECHNOLOGIES 53220A 频率计数器/定时, 350MHz 12位 100PS 53220A 350MHz通用频率计数器/计时
    的头像 发表于 02-12 17:15 813次阅读
    KEYSIGHT是德科技53220A台式频率计<b class='flag-5'>计数器</b>原安捷伦

    ‌尘埃粒子计数器有什么特点

    在当今对空气质量要求日益严苛的时代,尘埃粒子计数器作为种高效、准确的检测工具,正逐渐成为众多领域重要的得力助手。它采用激光散射原理,以稳定的气流流速对空气进行采样,当空气中的微粒通过内部光敏
    的头像 发表于 01-24 11:44 709次阅读

    名单公布!【书籍评测活动NO.56】极速探索HarmonyOS NEXT:纯血鸿蒙应用开发实践

    的各个关键领域。另外,书中还提供了基于HarmonyOS NEXT 的完整实战项目和3特色案例,并附带了全套的源代码。 本书适合鸿蒙应用开发工程师、移动应用
    发表于 01-20 16:53

    UC-018:时间间隔计数器的用途

    电子发烧友网站提供《UC-018:时间间隔计数器的用途.pdf》资料免费下载
    发表于 01-13 17:02 0次下载
    UC-018:时间间隔<b class='flag-5'>计数器</b>的用途

    鸿蒙Flutter实战:14-现有Flutter 项目支持鸿蒙 II

    ,职责分离,平台抽象,不同平台组合打包,有效解决平台不致问题 参考资料 鸿蒙Flutter实战:01-搭建开发环境 鸿蒙Flutter
    发表于 12-26 14:59

    智能雷击计数器的综合行业解决方案

    智能雷击计数器种用于记录雷击事件发生次数的高科技装置,广泛应用于防雷系统中。与传统的机械式雷击计数器相比,智能雷击计数器不仅能够精确记录雷击次数,还能对雷电参数进行分析,并通过智
    的头像 发表于 12-20 10:50 878次阅读
    智能雷击<b class='flag-5'>计数器</b>的综合行业解决方案