HarmonyOS应用开发实战:萌宠日记 - 保存按钮与底部操作栏
HarmonyOS应用开发实战萌宠日记 - 保存按钮与底部操作栏前言保存按钮是日记编辑器的最终操作入口用户完成所有输入后通过点击保存按钮将日记数据持久化。在萌宠日记的日记编辑器中底部操作栏包含社交分享按钮和保存按钮采用左右分布的布局将主要操作按钮放在右侧符合用户的操作习惯。本文将从萌宠日记的保存按钮与底部操作栏实现出发深入解析按钮设计、布局分布、保存逻辑、以及操作反馈的完整实现。一、底部操作栏整体设计1.1 布局结构┌─────────────────────────────────────┐ │ [ 保存 ] │ │ 社交分享 主题色按钮 │ └─────────────────────────────────────┘1.2 完整代码// WriteDiaryPage.ets — 底部操作栏 Row() { // 左侧社交分享 Row({ space: 16 }) { Text() .fontSize(20) Text() .fontSize(20) } Blank() // 右侧保存按钮 Button(保存) .fontSize(15) .fontColor(Color.White) .backgroundColor(#F5A623) .borderRadius(20) .padding({ left: 24, right: 24, top: 8, bottom: 8 }) .onClick(() { this.saveDiary() }) } .width(100%) .padding({ bottom: 20 })提示底部操作栏使用Row 布局左侧放置社交分享图标中间使用Blank()弹性占位右侧放置保存按钮。这种左右分布的布局方式将主要操作按钮保存放在右侧符合移动端用户的操作习惯。二、保存按钮设计2.1 按钮样式Button(保存) .fontSize(15) // 按钮文字大小 .fontColor(Color.White) // 白色文字 .backgroundColor(#F5A623) // 品牌橙色背景 .borderRadius(20) // 胶囊形圆角 .padding({ left: 24, right: 24, top: 8, bottom: 8 }) // 内边距 .onClick(() { this.saveDiary() })2.2 按钮样式参数参数值说明fontSize15fp适中字号fontColorColor.White白色文字高对比度backgroundColor#F5A623品牌橙色borderRadius20胶囊形圆角左右内边距24vp水平内边距充分上下内边距8vp垂直内边距适中三、社交分享图标3.1 图标设计Row({ space: 16 }) { Text() // 全球分享 .fontSize(20) Text() // 好友分享 .fontSize(20) }3.2 图标含义图标含义功能说明公开分享发布到社区或社交平台好友可见仅限好友查看四、保存逻辑4.1 数据收集// 保存日记 — 收集所有编辑数据 saveDiary(): void { const diaryData { title: this.title, // 日记标题 content: this.content, // 正文内容 mood: this.selectedMood, // 心情索引 moodLabel: this.moods[this.selectedMood].label, // 心情文字 location: this.location, // 地点 weather: this.weather, // 天气 date: this.date, // 日期 createdAt: new Date().toISOString(), // 创建时间 updatedAt: new Date().toISOString() // 更新时间 } // 执行保存 this.persistDiary(diaryData) }4.2 数据持久化// 持久化日记数据 persistDiary(diaryData: DiaryData): void { try { // 1. 保存到本地数据库或 Preferences // 2. 更新全局状态 // 3. 返回上一页 console.log(Diary saved:, diaryData.title) // 返回日记列表 this.diaryStack.pop() } catch (err) { console.error(Save failed:, JSON.stringify(err)) // 显示错误提示 } }五、保存状态反馈5.1 保存状态管理enum SaveState { IDLE, // 空闲 SAVING, // 保存中 SUCCESS, // 保存成功 ERROR // 保存失败 } State saveState: SaveState SaveState.IDLE // 根据状态显示不同 UI getSaveButtonText(): string { switch (this.saveState) { case SaveState.IDLE: return 保存 case SaveState.SAVING: return 保存中... case SaveState.SUCCESS: return 已保存 ✓ case SaveState.ERROR: return 保存失败重试 } }5.2 保存中状态// 保存中显示加载状态 Button(this.getSaveButtonText()) .fontSize(15) .fontColor(Color.White) .backgroundColor(this.saveState SaveState.ERROR ? #F44336 : #F5A623) .enabled(this.saveState ! SaveState.SAVING) // 保存中禁用 .onClick(() { if (this.saveState SaveState.ERROR) { this.saveDiary() // 失败时重试 } else { this.saveDiary() } })六、保存成功反馈6.1 Toast 提示// 保存成功后显示 Toast saveDiary(): void { this.saveState SaveState.SAVING // 模拟保存操作 setTimeout(() { this.saveState SaveState.SUCCESS // 显示成功提示 console.log(保存成功) // 延迟返回 setTimeout(() { this.diaryStack.pop() }, 500) }, 1000) }七、布局位置7.1 底部操作栏的位置// 底部操作栏在编辑区的最后 Scroll() { Column({ space: 20 }) { // 标题输入 // 分隔线 // 正文输入 // 照片附件 // 心情选择 // 地点与天气 // 保存按钮位于底部 this.SaveButton() } .padding({ left: 16, right: 16 }) } .layoutWeight(1)7.2 位置设计考量位置选项优点缺点编辑区底部跟随滚动始终在内容之后长内容时需要滚动到底部固定底部始终可见遮挡键盘和内容导航栏容易发现占用导航栏空间八、保存按钮的变体设计8.1 固定底部保存栏// 固定底部保存栏另一种方案 Column() { // 可滚动编辑区 Scroll() { // 编辑内容... } .layoutWeight(1) // 固定底部操作栏 Row() { Row({ space: 16 }) { Text().fontSize(20) Text().fontSize(20) } Blank() Button(保存) .fontSize(15).fontColor(Color.White) .backgroundColor(#F5A623) .borderRadius(20) .padding({ left: 24, right: 24, top: 8, bottom: 8 }) } .width(100%) .padding(16) .backgroundColor(#FFFFFF) .shadow({ radius: 4, color: #10000000, offsetY: -2 }) }九、无障碍适配Button(保存) .fontSize(15) .fontColor(Color.White) .backgroundColor(#F5A623) .borderRadius(20) .accessibilityText(保存日记) Text() .fontSize(20) .accessibilityText(分享到社交平台) Text() .fontSize(20) .accessibilityText(分享给好友)十、最佳实践10.1 保存按钮设计原则有序列表 — 保存按钮设计的 5 个原则位置明确保存按钮在编辑区底部用户完成编辑后自然找到视觉突出品牌橙色背景 白色文字与灰色标签区明显区分状态反馈保存中、成功、失败状态应有明确的视觉反馈防止重复保存中禁用按钮防止重复提交失败重试保存失败时提供重试机制10.2 萌宠日记保存按钮总结设计要素值说明按钮文字保存简洁明确背景色#F5A623品牌橙色文字色Color.White白色高对比圆角20胶囊形左右内边距24vp充分的内边距位置编辑区底部跟随内容保存状态IDLE/SAVING/SUCCESS/ERROR四种状态总结本文从萌宠日记的保存按钮与底部操作栏实现出发深入解析了按钮设计与保存逻辑的完整方法布局设计Row 左右分布左侧社交分享右侧保存按钮按钮样式品牌橙色 胶囊圆角 白色文字社交分享图标 公开分享 好友可见保存逻辑数据收集 → 持久化 → 返回保存状态IDLE/SAVING/SUCCESS/ERROR 四种状态成功反馈Toast 提示 自动返回固定底部方案另一种保存栏设计无障碍适配accessibilityText 描述下一篇我们将深入Divider 分割线在表单中的运用解析日记编辑器中 Divider 的布局与视觉分割作用。如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力相关资源Button 组件https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-buttonBlank 组件https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-blankRow 组件https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-row数据持久化https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/app-data-persistence用户首选项https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/data-persistence-by-preferences关系型数据库https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/data-persistence-by-rdb-store无障碍开发https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/accessibility-kit交互反馈https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/interaction-feedback

相关新闻

2026科技创新的国内EMBA中立择校测评

2026科技创新的国内EMBA中立择校测评

民营企业家、企业创始人选读EMBA,大多纠结三大问题:课程是否贴合科创转型、圈层是否匹配企业发展、资源能否助力出海与数字化升级。本文从全球办学排名、院校办学定位、课程体系、学员圈层、产业资源五大维度,对科技创新的国内EMBA主流项目做…

2026/10/20 16:37:30 阅读更多 →
计算机毕业设计之基于SpringBoot的摄影平台

计算机毕业设计之基于SpringBoot的摄影平台

随着人们生活水平的提升与数字技术的发展,摄影已从专业领域走入大众生活,无论是记录日常美好瞬间,还是追求艺术创作,对摄影的需求日益增长。然而,市场上缺乏一个集作品展示、服务交易、学习交流于一体的综合性平台&…

2026/10/19 16:02:23 阅读更多 →
macOS开发证书配置与Xcode项目上架全指南

macOS开发证书配置与Xcode项目上架全指南

1. macOS开发证书配置全流程解析 作为苹果生态开发者,证书配置是项目上架前的必经之路。我经历过无数次证书配置的"血泪史",今天就把这些经验系统梳理出来。macOS开发证书主要分为开发证书(Development)和发布证书(Distribution)两类&#xff…

2026/10/19 10:54:20 阅读更多 →

最新新闻

Spring Boot JPA逆向生成数据表:实体类驱动建表配置与踩坑实践

Spring Boot JPA逆向生成数据表:实体类驱动建表配置与踩坑实践

做后端开发这几年,我踩过最深的一个坑,就是“实体类和表结构对不上”。早期接手一个老项目,数据库脚本维护了三套,实体类改了字段忘了同步建表 SQL,等联调的时候才发现查出来的字段全是 null,那叫一个酸爽。…

2026/10/20 21:36:20 阅读更多 →
网络安全应急演练体系笔记:从预案培训到企业级落地全流程

网络安全应急演练体系笔记:从预案培训到企业级落地全流程

简介:这份文档资料面向政府机构、企事业单位的安全管理人员及专业应急处理人员,系统讲解网络安全应急响应预案的培训与演练方法,帮助组织在遭遇网络攻击、数据泄露等突发事件时做到临危不乱、有效处置。内容围绕培训与演练的目的、培训要求与…

2026/10/20 21:36:20 阅读更多 →
合规技术分享:从内容安全到落地笔记的实践指南

合规技术分享:从内容安全到落地笔记的实践指南

简介:面向需要处理域名封禁问题的网站运营者与个人站长,这份小型工具包提供一套基于COS域名的防红防封链接生成方案。借助内置接口,使用者只需输入待解封域名,点击生成按钮即可得到长期有效的防封链接,无需复杂配置&am…

2026/10/20 21:36:20 阅读更多 →
LLM作为研究世界模型:从论文文本预测实验结果

LLM作为研究世界模型:从论文文本预测实验结果

1. 项目概述:当大语言模型不再“编故事”,而是开始“算实验”最近在某高校实验室带学生做跨模态推理项目时,一个现象让我反复琢磨了两周——我们训练好的一个中等规模LLM,在没有接触任何物理仿真引擎、不调用外部求解器、甚至没看…

2026/10/20 21:36:20 阅读更多 →
短视频矩阵云混剪系统源码V2.2.1:批量渲染与工程化落地

短视频矩阵云混剪系统源码V2.2.1:批量渲染与工程化落地

简介:这份抖音矩阵云混剪系统源码对应短视频矩阵营销系统V2.2.1免授权版本,面向从事多平台多账号运营的短视频团队、矩阵营销从业者及希望自建混剪工具的技术开发者,用于解决批量账号管理、内容分发与获客转化等环节的效率问题。系统支持多平…

2026/10/20 21:36:20 阅读更多 →
H3-Base快速出片指南:三大优化路线实测与选型建议

H3-Base快速出片指南:三大优化路线实测与选型建议

H3-Base开源那几天,技术群里最热闹的话题反而不是模型结构有多惊艳,而是怎么让它快速出片。我说的出片不是生成图片和视频,而是指在工程上尽快把模型跑起来、跑得快、跑得省,最终拿到能交付的结果——比如长文本摘要、结构化信息抽…

2026/10/20 21:35:13 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →