当前位置:   article > 正文

案例:待办列表_deveco studio 待办列表怎么导入图片

deveco studio 待办列表怎么导入图片

介绍

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

相关概念

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

完整示例

gitee源码地址

源码下载

待办列表(ArkTS).zip

环境搭建

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

软件要求

硬件要求

  • 设备类型:华为手机或运行在DevEco Studio上的华为手机设备模拟器。
  • HarmonyOS系统:3.1.0 Developer Release。

环境搭建

  1. 安装DevEco Studio,详情请参考下载和安装软件
  2. 设置DevEco Studio开发环境,DevEco Studio开发环境需要依赖于网络环境,需要连接上网络才能确保工具的正常使用,可以根据如下两种情况来配置开发环境: 
    • 如果可以直接访问Internet,只需进行下载HarmonyOS SDK操作。
    • 如果网络不能直接访问Internet,需要通过代理服务器才可以访问,请参考配置开发环境
  3. 开发者可以参考以下链接,完成设备调试的相关配置: 

代码结构解读

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

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

构建主界面

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

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

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

  1. // EntryAbility.ts
  2. onWindowStageCreate(windowStage: Window.WindowStage) {
  3. ...
  4. windowStage.loadContent('pages/ToDoListPage', (err, data) => {
  5. ...
  6. });
  7. }

选中工程的ets目录,点击鼠标右键 > new> Directory,新建view文件夹。选中新建的view文件夹,点击鼠标右键 > new> ArkTS File,新建ToDoItem.ets文件。后续在此文件中封装自定义组件。

在ToDoListPage.ets中导入封装的自定义组件ToDoItem,在aboutToAppear生命周期中初始化待办数据totalTasks,在build方法中编写主页面布局,使用Text文本组件显示标题,使用ForEach循环渲染自定义组件ToDoItem。

  1. // ToDoListPage.ets
  2. import ToDoItem'../view/ToDoItem';
  3. ...
  4. @Entry
  5. @Component
  6. struct ToDoListPage {
  7. private totalTasks: Array<string> = [];
  8. aboutToAppear() {
  9. this.totalTasks = DataModel.getData();
  10. }
  11. build() {
  12. Column({ space: CommonConstants.COLUMN_SPACE }) {
  13. Text($r('app.string.page_title'))
  14. ...
  15. ForEach(this.totalTasks, (item: string) => {
  16. ToDoItem({ content: item })
  17. }, (item: string) => JSON.stringify(item))
  18. }
  19. ...
  20. }
  21. }
 

自定义子组件

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

  1. // ToDoItem.ets
  2. ...
  3. @Component
  4. export default struct ToDoItem {
  5. private content?: string;
  6. @State isComplete: boolean = false;
  7. @Builder labelIcon(icon: Resource) {
  8. Image(icon)
  9. ...
  10. }
  11. build() {
  12. Row() {
  13. if (this.isComplete) {
  14. this.labelIcon($r('app.media.ic_ok'));
  15. } else {
  16. this.labelIcon($r('app.media.ic_default'));
  17. }
  18. Text(this.content)
  19. ...
  20. .opacity(this.isComplete ? CommonConstants.OPACITY_COMPLETED : CommonConstants.OPACITY_DEFAULT)
  21. .decoration({ type: this.isComplete ? TextDecorationType.LineThrough : TextDecorationType.None })
  22. }
  23. ...
  24. .onClick(() => {
  25. this.isComplete = !this.isComplete;
  26. })
  27. }
  28. }

总结

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

  1. ArkTS声明式语法。
  2. Image、Text、Column、Row等基础组件的使用。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/302349
推荐阅读
相关标签
  

闽ICP备14008679号