HarmonyOS-如何使用ArkTS声明式语法和基础组件,实现待办列表。

介绍

本篇Codelab将介绍如何使用ArkTS声明式语法和基础组件,实现简易待办列表。效果为点击某一事项,替换标签图片、虚化文字。效果如图所示:

相关概念

  • ArkTS语法:ArkTS是HarmonyOS的主要应用开发语言。ArkTS基于TypeScript(简称TS)语言扩展而来,是TS的超集。
  • Text组件:显示一段文本的组件。
  • Column组件:沿垂直方向布局的容器。
  • Row组件:沿水平方向布局的容器。

环境搭建

软件要求

  • DevEco Studio版本:DevEco Studio 3.1 Release。
  • OpenHarmony SDK版本:API version 9。

硬件要求

  • 开发板类型:润和RK3568开发板。
  • OpenHarmony系统:3.2 Release。

环境搭建

完成本篇Codelab我们首先要完成开发环境的搭建,本示例以RK3568开发板为例,参照以下步骤进行:

  1. 获取OpenHarmony系统版本:标准系统解决方案(二进制)。以3.2 Release版本为例:

2.搭建烧录环境。

  1. 完成DevEco Device Tool的安装
  2. 完成RK3568开发板的烧录

3.搭建开发环境。

  1. 开始前请参考工具准备,完成DevEco Studio的安装和开发环境配置。
  2. 开发环境配置完成后,请参考使用工程向导创建工程(模板选择“Empty Ability”)。
  3. 工程创建完成后,选择使用真机进行调测。

代码结构解读

本篇Codelab只对核心代码进行讲解。

├──entry/src/main/ets                   // ArkTS代码区
│  ├──common
│  │  └──constants
│  │     └──CommonConstants.ets         // 公共常量类
│  ├──entryability
│  │  └──EntryAbility.ts                // 程序入口类
│  ├──pages
│  │  └──ToDoListPage.ets               // 主页面
│  ├──view
│  │  └──ToDoItem.ets                   // 自定义单项待办组件
│  └──viewmodel
│     └──DataModel.ets                  // 列表数据获取文件
└──entry/src/main/resources             // 资源文件目录

构建主界面

本章节将介绍应用主页面的实现,采用Column容器嵌套ForEach完成页面整体布局,页面分为两个部分:

  • 标题区:使用Text组件显示“待办”标题。
  • 数据列表:使用ForEach循环渲染自定义组件ToDoItem。

效果如图所示:

在工程pages目录中,选中Index.ets,点击鼠标右键 > Refactor > Rename,改名为ToDoListPage.ets。改名后,在工程entryability目录下,把EntryAbility.ts文件中windowStage.loadContent方法的第一个参数修改为pages/ToDoListPage。

// EntryAbility.ts
onWindowStageCreate(windowStage: Window.WindowStage) {...windowStage.loadContent('pages/ToDoListPage', (err, data) => {...});
}

选中工程的ets目录,点击鼠标右键 > new > Directory,新建view文件夹。选中新建的view文件夹,点击鼠标右键 > new > ArkTS File,新建ToDoItem.ets文件。后续在此文件中封装自定义组件。在ToDoListPage.ets中导入封装的自定义组件ToDoItem,在aboutToAppear生命周期中初始化待办数据totalTasks,在build方法中编写主页面布局,使用Text文本组件显示标题,使用ForEach循环渲染自定义组件ToDoItem。

// ToDoListPage.ets
import ToDoItem'../view/ToDoItem';
...
@Entry
@Component
struct ToDoListPage {private totalTasks: Array<string> = [];aboutToAppear() {this.totalTasks = DataModel.getData();}build() {Column({ space: CommonConstants.COLUMN_SPACE }) {Text($r('app.string.page_title'))...ForEach(this.totalTasks, (item: string) => {ToDoItem({ content: item })}, (item: string) => JSON.stringify(item))}...}
}

自定义子组件

在ToDoItem.ets文件中,显示的文本内容为入参content,使用@State修饰参数isComplete来管理当前事项的完成状态。当点击当前ToDoItem时,触发Row组件的onClick事件,更新isComplete的值,isComplete的改变将会刷新使用该状态变量的UI组件。具体表现为:当前点击的ToDoItem中,labelIcon图片的替换、文本透明度opacity属性的变化、文本装饰线decoration的显隐。

// ToDoItem.ets
...
@Component
export default struct ToDoItem {private content: string = '';@State isComplete: boolean = false;@Builder labelIcon(icon: Resource) {Image(icon)...}build() {Row() {if (this.isComplete) {this.labelIcon($r('app.media.ic_ok'));} else {this.labelIcon($r('app.media.ic_default'));}Text(this.content)....opacity(this.isComplete ? CommonConstants.OPACITY_COMPLETED : CommonConstants.OPACITY_DEFAULT).decoration({ type: this.isComplete ? TextDecorationType.LineThrough : TextDecorationType.None })}....onClick(() => {this.isComplete = !this.isComplete;})}
}

总结

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

  1. ArkTS声明式语法。
  2. Image、Text、Column、Row等基础组件的使用。

为了帮助大家更深入有效的学习到鸿蒙开发知识点,小编特意给大家准备了一份全套最新版的HarmonyOS NEXT学习资源,获取完整版方式请点击→HarmonyOS教学视频

HarmonyOS教学视频:语法ArkTS、TypeScript、ArkUI等…视频教程

鸿蒙生态应用开发白皮书V2.0PDF:

获取完整版白皮书方式请点击→《鸿蒙生态应用开发白皮书V2.0PDF

在这里插入图片描述

鸿蒙 (Harmony OS)开发学习手册

一、入门必看

  1. 应用开发导读(ArkTS)
  2. .……

在这里插入图片描述


二、HarmonyOS 概念

  1. 系统定义
  2. 技术架构
  3. 技术特性
  4. 系统安全

在这里插入图片描述

三、如何快速入门?《鸿蒙基础入门学习指南》

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. .……

在这里插入图片描述


四、开发基础知识

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. .……

在这里插入图片描述


五、基于ArkTS 开发

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 7.网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. .……

在这里插入图片描述


更多了解更多鸿蒙开发的相关知识可以参考:《鸿蒙 (Harmony OS)开发学习手册

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

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

相关文章

Java八股文(高并发,分布式,JUC)

Java八股文の高并发&#xff0c;分布式&#xff0c;JUC 高并发&#xff0c;分布式&#xff0c;JUC 高并发&#xff0c;分布式&#xff0c;JUC 对于高并发的系统&#xff0c;为了提高用户的体验&#xff0c;你是如何做的&#xff1f;或者说高并发的技巧你用过哪些&#xff1f; …

视频实时行为检测——基于yolov5+deepsort+slowfast算法

1. 背景介绍 随着互联网和移动设备的普及&#xff0c;视频数据量呈爆炸式增长。视频监控、智能家居、自动驾驶等领域对视频内容的理解和分析提出了更高的要求。实时行为检测技术能够从视频中识别出特定行为&#xff0c;为这些领域提供智能化的解决方案。本文将介绍一种基于yol…

Flink学习(一)-flink 本地部署

1&#xff0c;安装 jdk 官网推荐 jdk11 版本。我用 17也可以跑起来 2&#xff0c;下载 flink-1.19 的版本并解压 下载 release 1.19.0 并解压。 tar -xzf flink-1.19.0-bin-scala_2.12.tgz cd flink-1.19.0 3&#xff0c;启动 ./bin/start-cluster.sh 4&#xff0c;访问…

springboot通过threadLocal+参数解析器实现保存当前用户登录信息

首先先介绍一下threadLocal ThreadLocal 线程局部变量&#xff0c;创建一个线程变量后&#xff0c;针对这个变量可以让每个线程拥有自己的变量副本&#xff0c;每个线程是访问的自己的副本&#xff0c;与其他线程的相互独立。 大致知道threadLocal就可以了&#xff0c;然后我…

家电维修之 电子元件 学习

上面一个三角形 下面一根横线是什么电子元件 上面一个三角形下面一根横线是电子元件的图形通常表示一个二极管。二极管是一种常见的电子元件&#xff0c;它具有两个电极&#xff0c;即正极&#xff08;阳极&#xff09;和负极&#xff08;阴极&#xff09;。 上面的三角形表示…

Qt 完成图片的缩放拖动

1. 事件和函数 主要使用事件paintEvent(QPaintEvent *event)和drawTiledPixmap函数实现绘图。 paintEvent事件在改变窗口大小、移动窗口、手动调用update等情形下会被调用。需先了解下绘图该函数的用法。 - QPainter::drawTiledPixmap(int x, int y, int w, int h, const QPi…

Docker部署MongoDB+整合Mongo版MyBatis—Plus

&#x1f469;&#x1f3fd;‍&#x1f4bb;个人主页&#xff1a;阿木木AEcru &#x1f525; 系列专栏&#xff1a;《Docker容器化部署系列》 《Java每日面筋》 &#x1f4b9;每一次技术突破&#xff0c;都是对自我能力的挑战和超越。 目录 一、 MongoDB简介1.1 适用场景1.2 应…

缓冲区溢出漏洞学习总结(漏洞原理及其利用方法)

文章目录 前言1、缓冲区溢出漏洞概述1.1、漏洞概述1.2、缓冲区溢出漏洞概述1.3、缓冲区溢出攻击概述1.4、引发缓冲区溢出的原因 2、栈溢出漏洞2.1、栈溢出漏洞概述2.2、栈溢出漏洞利用2.2.1、利用方法一&#xff1a;修改返回地址2.2.2、利用方法二&#xff1a;覆盖临接变量 3、…

(js)循环条件满足时终止循环

(js)循环条件满足时终止循环 功能需求&#xff1a;勾选的字段中若包含“数据标注划分”则显示数据划分&#xff0c;不包含则不显示 包含&#xff1a; 不包含&#xff1a; // 标注划分显示 const markStr 数据标注划分 for (let i 0; i < value.length; i) { //value为勾选…

Coursera自然语言处理专项课程03:Natural Language Processing with Sequence Models笔记 Week02

Natural Language Processing with Sequence Models Course Certificate 本文是https://www.coursera.org/learn/sequence-models-in-nlp 这门课程的学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。 文章目录 Natural Language Processing with Sequence ModelsWeek 02…

vsqt更改ui,cpp报错(唯二)解决方法,及ui界面布局在cpp文件的运用基本流程

qt的ui布局界面如下 点cpp文件->编译 此时就会自动生成ui_xxx.h 这里是ui文件里面就有类名&#xff1a;Ui_文件名字 下面就有一个类继承于这个类 你所使用的这个ui指针&#xff0c;就这么来的 ***报错解决方法有两种&#xff1a;***第一种&#xff1a;如果改了ui&#x…

Mac更换JDK版本

1.确保系统中存在多个Java版本。 在Terminal中执行&#xff1a; /usr/libexec/java_home -V 结果&#xff1a; Matching Java Virtual Machines (2): 11.0.1, x86_64: "Java SE 11.0.1" /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home 1.8.0_2…

一道题目 加深对差分和二分的理解

[NOIP2012 提高组] 借教室 - 洛谷 差分 针对区间操作&#xff0c;在本题中体现为多次对序列的区间加上一个数 对差分数组的操作为&#xff0c; diff[l] k; diff[r1] - k; 最后通过前缀和来实现整个区间加上一个数的效果。 二分 大多数人对于二分的基础印象可能是&#xf…

Pytorch nn.Linear()

nn.Linear就是神经网络中的线性层&#xff0c;类似于数学中的线性函数&#xff0c;可以实现形如yX*weight^Tb的功能。 #导包 import torch.nn as nn import torch#创建1个张量 sampletorch.tensor([1.,10.,100.])#nn.Linear(in_feature,out_feature,bias)&#xff0c;这里设置…

钉钉服务端API报错 错误描述: robot 不存在;解决方案:请确认 robotCode 是否正确

problem 调用钉钉服务端API&#xff0c;机器人发送群聊消息&#xff0c;后台返回报错信息: 钉钉服务端API报错 错误描述: robot 不存在&#xff1b;解决方案:请确认 robotCode 是否正确&#xff1b; reason 定位: 登录后台&#xff0c;查看机器人是存在查看机器人调用权限接…

SQL中添加数据的方式

概述 在SQL中&#xff0c;添加数据主要通过INSERT INTO语句实现。这是一种非常基础且常用的SQL操作&#xff0c;适用于各种关系型数据库管理系统&#xff0c;如MySQL、PostgreSQL、Oracle等。根据提供的搜索结果&#xff0c;我们将详细讨论如何使用INSERT INTO语句&#xff0c;…

爬虫工作量由小到大的思维转变---<第六十二章 Scrapy统计收集器类的分析与应用(1)>

​​​​​​​前言: 在当今信息时代的互联网环境中&#xff0c;网络爬虫正日益成为了获取和分析大量数据的关键工具。网络爬虫的用途广泛&#xff0c;包括搜索引擎的建立、商业情报的收集、舆情分析等。然而&#xff0c;随着互联网规模和复杂性的不断增加&#xff0c;监控和统…

Django创建多app应用

目录 1. 引言 2. 多app创建的两种方式 2.1 多个app结构 2.2 单个apps多个app 3. 最后 1. 引言 在平常业务开发中&#xff0c;我们遇到的功能可能会有很多&#xff0c;单个app的应用可能无法满足我们 这个时候&#xff0c;我们就需要多app应用&#xff0c;例如&#xff1a…

linux 组建raid5详细操作

raid5最多运行损坏一个盘&#xff0c;最少3个盘&#xff0c;容量为少一块硬盘的容量之和。 如果硬盘数量较多&#xff0c;比如8块以上&#xff0c;建议用raid6&#xff0c;raid6最多允许两块硬盘损坏。 如果需要 一、安装raid软件 deb包 apt-get install mdadm或dnf包 dnf …

LeetCode-49. 字母异位词分组【数组 哈希表 字符串 排序】

LeetCode-49. 字母异位词分组【数组 哈希表 字符串 排序】 题目描述&#xff1a;解题思路一&#xff1a;哈希表和排序&#xff0c;这里最关键的点是&#xff0c;乱序单词的排序结果必然是一样的&#xff08;从而构成哈希表的key&#xff09;。解题思路二&#xff1a;解题思路三…