尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

HarmonyOs应用《日记本》开发第1篇 - 构建完整项目

HarmonyOs应用《日记本》开发第1篇 - 构建完整项目
📅 发布时间:2026/7/25 7:19:46

背景

本人很喜欢写日记,所以很久之前就想做一个日记本相关的应用,这次正好有这个机会就以日记本为项目目标,开发一个日记本应用.

日记本开发如下:

项目概述

在本系列博客中,我们将以一个完整的鸿蒙(HarmonyOS)日记应用为案例,深入剖析 HarmonyOS ArkTS 开发的方方面面。这个日记应用虽然功能精简,却涵盖了一个完整应用所需的全部核心要素——从 UI 声明式开发到数据持久化,从页面路由到生命周期管理,从状态管理到组件设计。

应用功能一览

功能模块说明
日记列表卡片式展示所有日记,支持加载状态和空状态
日记创建支持日期选择、天气/心情标签、标题与内容输入
日记编辑复用创建页面,支持回填数据与更新
日记详情展示完整日记内容,支持编辑和删除
数据持久化基于 Preferences 轻量级存储,单例模式管理

技术选型

  • 开发语言: ArkTS(HarmonyOS 声明式 UI 开发框架)
  • 应用模型: Stage 模型(HarmonyOS 推荐的新一代应用模型)
  • 目标平台: HarmonyOS 5.0+(API 12)
  • 数据存储: @kit.ArkData 的 Preferences 模块
  • 设计模式: 单例模式(DiaryStore 数据管理层)

项目结构总览

Daily/ ├── AppScope/ │ └── app.json5 # 应用级配置 ├── entry/ │ ├── build-profile.json5 # 模块构建配置 │ ├── oh-package.json5 # 模块包配置 │ └── src/main/ │ ├── module.json5 # 模块配置(声明入口Ability) │ ├── ets/ │ │ ├── entryability/ │ │ │ └── EntryAbility.ets # 入口能力(UIAbility) │ │ ├── model/ │ │ │ └── DiaryModel.ets # 数据模型定义 │ │ ├── utils/ │ │ │ └── DiaryStore.ets # 数据存储管理 │ │ └── pages/ │ │ ├── Index.ets # 主页(日记列表) │ │ ├── DiaryEdit.ets # 日记编辑页 │ │ └── DiaryDetail.ets # 日记详情页 │ └── resources/base/ │ ├── element/ │ │ ├── color.json # 颜色资源 │ │ └── string.json # 字符串资源 │ └── profile/ │ └── main_pages.json # 页面路由配置 ├── build-profile.json5 # 项目构建配置 ├── oh-package.json5 # 项目包配置 └── hvigor/hvigor-config.json5 # Hvigor 构建工具配置

架构分层设计

本项目采用了清晰的分层架构:

┌─────────────────────────────────────────┐ │ UI 层 (Pages) │ │ Index.ets │ DiaryEdit.ets │ Detail │ ├─────────────────────────────────────────┤ │ 数据模型层 (Model) │ │ DiaryModel.ets │ ├─────────────────────────────────────────┤ │ 数据存储层 (Store) │ │ DiaryStore.ets │ ├─────────────────────────────────────────┤ │ HarmonyOS 平台层 (Platform) │ │ @kit.ArkData │ @kit.ArkUI │ ... │ └─────────────────────────────────────────┘

各层职责:

  • UI 层:负责界面展示和用户交互,通过@State管理组件状态
  • 模型层:定义数据结构(DiaryItem)、枚举常量(MoodList、WeatherList)和辅助函数
  • 存储层:封装 Preferences API,提供增删改查接口,采用单例模式
  • 平台层:HarmonyOS 提供的系统能力 Kit

核心代码速览

入口能力 EntryAbility

exportdefaultclassEntryAbilityextendsUIAbility{asynconCreate(want:Want,launchParam:AbilityConstant.LaunchParam):Promise<void>{// 初始化数据存储awaitdiaryStore.init(this.context);}onWindowStageCreate(windowStage:window.WindowStage):void{windowStage.loadContent('pages/Index',(err)=>{if(err.code){console.error('Failed to load content. cause: '+JSON.stringify(err));return;}console.info('Succeeded in loading content.');});}}

应用启动时,onCreate中异步初始化数据存储,onWindowStageCreate中加载主页pages/Index。

数据模型 DiaryModel

exportclassDiaryItem{id:string;title:string;content:string;date:string;// 日期 YYYY-MM-DDcreateTime:number;// 创建时间戳updateTime:number;// 更新时间戳mood:string;// 心情: happy / calm / sad / excited / angryweather:string;// 天气: sunny / cloudy / rainy / snowy / overcast}

数据存储 DiaryStore

exportclassDiaryStore{privatestore:preferences.Preferences|null=null;privatestaticinstance:DiaryStore;staticgetInstance():DiaryStore{if(!DiaryStore.instance){DiaryStore.instance=newDiaryStore();}returnDiaryStore.instance;}asyncinit(context:Context):Promise<void>{this.store=awaitpreferences.getPreferences(context,{name:'diary_store'});}}

页面路由设计

pages/Index (主页) ├──→ pages/DiaryEdit (写日记/编辑日记) └──→ pages/DiaryDetail (日记详情) └──→ pages/DiaryEdit (编辑日记)

页面路由在main_pages.json中声明:

{"src":["pages/Index","pages/DiaryEdit","pages/DiaryDetail"]}

设计理念

珊瑚红主题色

整个应用以#FF6B6B(珊瑚红)作为主色调,搭配#F5F5F5的浅灰背景和#FFFFFF的白色卡片,营造出温暖、清新的视觉风格:

色彩用途色值说明
主色调#FF6B6B珊瑚红,用于按钮、选中态、强调文字
背景色#F5F5F5浅灰,页面背景
卡片背景#FFFFFF纯白,卡片和导航栏
主文字#333333深灰,标题和重要文字
次要文字#999999中灰,辅助说明
提示文字#CCCCCC浅灰,占位提示
选中背景#FFF0F0淡粉,选中态背景

卡片式设计

日记列表采用卡片式布局,每张卡片包含:

  • 顶部:日期 + 天气 emoji + 心情 emoji
  • 中部:标题(单行截断)+ 内容预览(两行截断)
  • 底部:更新时间

卡片带有圆角(16vp)和柔和阴影,视觉效果精致。

环境准备

开始本系列之前,确保已安装以下工具:

  1. DevEco Studio:HarmonyOS 官方 IDE
  2. HarmonyOS SDK:API 12+(HarmonyOS 5.0)
  3. Node.js:构建工具 Hvigor 依赖

小结

本篇作为系列开篇,对整个日记项目进行了全景式概览。从项目结构、架构分层、核心技术选型到设计理念,为后续深入各个模块打下了基础。接下来的篇章将逐一深入每个主题,从配置文件到源码实现,全面解析鸿蒙 ArkTS 开发的每个细节。

相关新闻

  • 5个颠覆性功能:为什么DownKyi改变了视频下载的游戏规则?
  • FastWan-QAD:量化感知蒸馏技术实现1.8秒高效视频生成
  • 用 AI 学 Rust 的 100 天:记录每个阶段的有效方法和踩过的坑

最新新闻

  • 百度网盘解析工具:3分钟获取高速下载链接的终极指南
  • Unity Android集成SqlSuager:解决SqliteConnection类型初始化异常
  • 深入Qt跨平台开发:信号槽、内存管理与高级实践全解析
  • AI智能体开发实战:基于agency-agents框架构建多智能体协作系统
  • YOLOv5钢材表面缺陷检测系统开发与优化实践
  • 抖音直播数据抓取实战:WebSocket实时采集与业务洞察完整指南

日新闻

  • 从国家条件到买方清单,深入理解 ABAP CDS 单值过滤器派生
  • 2026 年当下,齐齐哈尔专业的不锈钢闸门批发厂家哪个好,揭秘!这个工业“铁门”如何实现成本翻倍的效率提升? - 行业甄选官
  • 2026阳极氧化加工厂推荐:从设备规模看硬质氧化技术的成熟应用推荐百正机械 - 栗子测评

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号