鸿蒙HarmonyOS开发Demo之代办小工具(保姆级教程&含项目代码zip)

项目搭建指南

相关链接

效果演示

鸿蒙移动端开发demo-代办小工具视频演示

项目搭建

从空项目开始

在这里插入图片描述

创建页面

  • 保留原有页面 Index.ets 作为App入口页面。
  • 新建两个页面:
    • AddTodo: 新增代办页面。
    • ToDoDetail: 代办详情页。

建议右键创建page页面,IDE会自动修改路由,新增页面。
在这里插入图片描述

系统会自动在这里新增路由。
在这里插入图片描述

创建数据

创建数据模型

src/main/ets 下新建文件夹 model,然后在下新建文件 ToDoModel.ets

export class ToDoModel {
   
  id: number
  name? : string
  date? : string
  color? : string
  imageUrl? : string

  constructor(id: number, name: string, date: string, color: string, imageUrl: string) {
   
    this.id = id
    this.name = name
    this.date = date
    this.color = color
    this.imageUrl = imageUrl
  }
}

创建默认数据

src/main/ets 下新建文件夹 common/constant,新建文件 CommonConstant.est,插入默认数据。

export default class CommonConstants {
   
   static readonly TODO_DATA: Array<ToDoModel> = [
    new ToDoModel(1, "早起晨练","2020-01-01","#FDD6AC","https://cdn.dribbble.com/users/1753960/screenshots/4965971/media/93c049fbbd538ce5ebe9230cfbd7f211.jpg"),
    // ...
  ];
  // ...
}

创建组件

组件的封装使用装饰器 @Component

创建首页组件

我们用默认的 Index.ets
每个页面都得用@Entry装饰器修饰结构体,表示页面入口,页面入口只能有一个

@Entry
@Component
struct Index {
   
  @State todoList: ToDoModel[] = CommonConstants.TODO_DATA

  build() {
   
    Column() {
   
      ToDoList({
    todoList: $todoList })
    }
  }
}

新建 ToDoList.ets

@Component
export default struct ToDoList {
   
  @Link todoList: ToDoModel[]

  build() {
   
    Stack() {
   
      // ...
    }
    .width(CommonConstants.FULL_LENGTH)
    .height(CommonConstants.FULL_LENGTH)
  }
}

创建标题组件

@Component
export struct TitleView {
   
  private title?: Resource 
  private titleStr?: string 

  build() {
   
    Text(this.title || this.titleStr)
      .fontSize($r('app.float.title_font_size'))
      .fontWeight(FontWeight.Bold)
      .lineHeight($r('app.float.title_font_height'))
      .width(CommonConstants.TITLE_WIDTH)
      .margin({
    top: $r('app.float.title_margin_top'), bottom: $r('app.float.title_margin_bottom') })
      .textAlign(TextAlign.Start)
  }
}

关于 Resource

Resource 表示资源文件类型,我们可以通过 $r 去读取资源文件。如 $r(‘app.media.icon’),其中app是固定值,media是src/main/resource/base下的文件夹名,icon是media文件夹下的具体资源名
$r还可以读取json文件中的字符串
比如在src/main/resource/base/element下新建文件float.json,按照如下格式填写,即可通过 $r(‘app.float.checkbox_width’) 读取到值 ‘28vp’

{
   
  "float": [
        {
   
          "name": "checkbox_width",
          "value": "28vp"
        }
    ]
  }

使用封装的组件

TitleView({
    title: $r('app.string.page_title')} )
  .margin({
    left: '5%' })

在这里插入图片描述

创建新增按钮组件

@Component
export struct AddButton {
   
  build() {
   
    Button($r("app.string.add_page_title"))
      .fontSize($r('app.float.item_font_size'))
      .padding({
    top:'5vp', bottom: '5vp'})
      .width('80%')
      .margin({
    bottom: '44pv' })
  }
}

在这里插入图片描述

创建列表组件

有两种方式,一种是用Scroller组件,一种是用List组件,两种都用了之后,发现List组件相对更好用,所以这里介绍List组件
新建一个名为ScrollView的组件

@Component
export struct ScrollView {
   
  @Link totalTasks: ToDoModel[]

  build() {
   
    List() {
   
      ForEach(this.totalTasks, (item: ToDoModel, index: number) => {
   
        ListItem() {
   
          // ...
        }
        .swipeAction({
    end: this.itemEnd.bind(this, item)})
      }, (item: ToDoModel) => item.id.toString())
    }
  }
}

给每个ListItem新增侧滑删除功能

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-13 17:50:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-13 17:50:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-13 17:50:03       82 阅读
  4. Python语言-面向对象

    2024-05-13 17:50:03       91 阅读

热门阅读

  1. RoundTrip测试RTT时延

    2024-05-13 17:50:03       31 阅读
  2. C++深拷贝与浅拷贝的区别

    2024-05-13 17:50:03       37 阅读
  3. HIVE函数大全

    2024-05-13 17:50:03       30 阅读
  4. LeetCode 每日一题 ---- 【2960.统计已测试设备】

    2024-05-13 17:50:03       39 阅读
  5. ArrayList的扩容机制解析

    2024-05-13 17:50:03       34 阅读
  6. Object c事件链传递

    2024-05-13 17:50:03       32 阅读
  7. SSH简介

    2024-05-13 17:50:03       33 阅读