HarmonyOS应用开发实战:萌宠日记 - 快捷操作图标网格布局
HarmonyOS应用开发实战萌宠日记 - 快捷操作图标网格布局前言快捷操作栏是首页中用户快速访问各功能模块的入口。在萌宠日记的首页中我们使用5 个快捷操作图标日记、档案、健康、相册、更多采用Row 水平布局 layoutWeight 等分的方式实现了均匀分布的图标网格。本文将从萌宠日记的快捷操作栏实现出发深入解析 Row 布局的等分机制、layoutWeight 的用法、图标与文字的垂直排列以及交互反馈的设计。一、快捷操作栏整体设计1.1 数据模型// HomePage.ets — 快捷操作数据结构 interface QuickAction { icon: string // Emoji 图标 label: string // 标签文字 color: string // 背景色 } private quickActions: QuickAction[] [ { icon: , label: 日记, color: #FFF3E0 }, { icon: , label: 档案, color: #E3F2FD }, { icon: , label: 健康, color: #E8F5E9 }, { icon: , label: 相册, color: #FCE4EC }, { icon: ⚙️, label: 更多, color: #F3E5F5 } ]1.2 布局渲染Row({ space: 8 }) { ForEach(this.quickActions, (action: QuickAction) { Column({ space: 6 }) { // 图标容器 Column() { Text(action.icon).fontSize(24) } .width(48).height(48) .backgroundColor(action.color) .borderRadius(14) .justifyContent(FlexAlign.Center) // 标签文字 Text(action.label) .fontSize(12) .fontColor(#666666) } .layoutWeight(1) // 等分宽度 .alignItems(HorizontalAlign.Center) .onClick(() { if (action.label 档案 this.onNavigateToPetProfile) { this.onNavigateToPetProfile() } }) }) } .width(100%) .padding({ left: 16, right: 16 })提示layoutWeight(1)是 ArkUI 中实现等分布局的核心属性。所有设置了相同layoutWeight的子组件会平分父容器的剩余空间非常适合实现 Tab 导航、图标网格等场景。二、layoutWeight 等分机制2.1 工作原理Row({ space: 8 }) { Column().layoutWeight(1) // 占 1 份 Column().layoutWeight(1) // 占 1 份 Column().layoutWeight(1) // 占 1 份 Column().layoutWeight(1) // 占 1 份 Column().layoutWeight(1) // 占 1 份 }宽度计算方式父容器宽度 360vp以标准手机为例 间距总和 8vp × 44 个间隔 32vp 剩余宽度 360 - 32 328vp 每个 layoutWeight(1) 的宽度 328 / 5 65.6vp2.2 layoutWeight 与固定宽度的对比布局方式代码特点layoutWeightlayoutWeight(1)动态分配自适应屏幕宽度固定宽度width(60)固定值不同屏幕下表现不一致百分比width(20%)按比例但需手动计算2.3 layoutWeight 参数参数值含义效果layoutWeight(1)权重为 1所有子组件等分layoutWeight(2)权重为 2占其他组件的 2 倍宽度layoutWeight(0)权重为 0不参与等分按内容自适应三、图标容器设计3.1 图标容器Column() { Text(action.icon) // 使用 Emoji 作为图标 .fontSize(24) } .width(48) // 固定宽度 .height(48) // 固定高度 .backgroundColor(action.color) // 每个图标不同的背景色 .borderRadius(14) // 圆角 .justifyContent(FlexAlign.Center) // 图标居中3.2 图标尺寸参数参数值说明图标容器宽高48×48vp适中的图标大小图标字号24fpEmoji 在 24fp 下清晰可辨圆角14vp圆角矩形柔和现代背景色各图标不同区分不同功能模块3.3 各图标的配色方案图标标签背景色色值寓意日记浅橙#FFF3E0温暖、记录档案浅蓝#E3F2FD沉稳、资料健康浅绿#E8F5E9健康、生机相册浅粉#FCE4EC甜美、回忆⚙️更多浅紫#F3E5F5功能、设置四、标签文字设计4.1 文字样式Text(action.label) .fontSize(12) // 小字号节省空间 .fontColor(#666666) // 灰色不抢眼4.2 图标与文字的间距Column({ space: 6 }) { // 图标容器 // 标签文字 }space: 6控制图标与文字的垂直间距在 48×48 的图标下方跟随 12fp 的文字6vp 的间距刚好合适。五、交互反馈5.1 点击事件.onClick(() { if (action.label 档案 this.onNavigateToPetProfile) { this.onNavigateToPetProfile() } // 其他图标的点击事件可扩展 })5.2 点击交互策略图标点击行为实现状态日记切换到日记 Tab 待实现档案导航到宠物档案页✅ 已实现健康切换到记录 Tab 待实现相册导航到相册页 待实现更多弹出更多操作 待实现六、布局响应式6.1 不同屏幕宽度下的表现// 使用 layoutWeight 自动适配不同屏幕 // 360vp 手机每个图标 ≈ 65.6vp // 390vp 手机每个图标 ≈ 71.6vp // 414vp 手机每个图标 ≈ 76.4vp // 600vp 平板每个图标 ≈ 113.6vp // 大屏下图标和文字可以适当放大 if (screenWidth 600) { // 大屏适配 }6.2 响应式适配屏幕宽度图标容器字号间距 360vp40×4020fp4vp360-414vp48×4824fp6vp414-600vp56×5628fp8vp 600vp64×6432fp10vp七、ForEach 渲染对比7.1 手动渲染 vs ForEach// 手动渲染不推荐 Row({ space: 8 }) { // 日记 Column() { Text().fontSize(24) }.width(48).height(48) // 档案 Column() { Text().fontSize(24) }.width(48).height(48) // 健康 Column() { Text().fontSize(24) }.width(48).height(48) // 相册 Column() { Text().fontSize(24) }.width(48).height(48) // 更多 Column() { Text(⚙️).fontSize(24) }.width(48).height(48) } // ForEach 渲染推荐 Row({ space: 8 }) { ForEach(this.quickActions, (action: QuickAction) { Column() { Text(action.icon).fontSize(24) } .width(48).height(48) }) }7.2 ForEach 的优势优势说明代码简洁数据驱动减少重复代码易于维护修改数据即可更新 UI扩展性强增加/减少操作项只需修改数据类型安全通过接口定义类型编译时检查八、交互扩展8.1 点击反馈// 添加点击涟漪效果 Column({ space: 6 }) { Column() { Text(action.icon).fontSize(24) } .width(48).height(48) .backgroundColor(action.color) .borderRadius(14) .justifyContent(FlexAlign.Center) .clickEffect({ level: ClickEffectLevel.LIGHT }) // 点击涟漪效果 Text(action.label).fontSize(12).fontColor(#666666) } .layoutWeight(1) .alignItems(HorizontalAlign.Center) .onClick(() { // 点击处理 })8.2 长按菜单.onLongClick(() { // 长按显示快捷操作说明 console.log(Long pressed:, action.label) // 可弹出 Toast 提示 })九、无障碍适配9.1 无障碍描述Column({ space: 6 }) { // 图标和文字 } .layoutWeight(1) .alignItems(HorizontalAlign.Center) .accessibilityText(${action.label}功能) // 如日记功能 .onClick(() { // 处理点击 })十、最佳实践10.1 设计原则有序列表 — 快捷操作栏设计的 5 个原则数量适中3-5 个快捷操作最为合适过多会显得拥挤图标语义化每个图标应直观表达功能含义配色区分不同功能使用不同的背景色便于视觉区分文字辅助图标下方配合文字标签避免歧义点击区域充足每个操作项的点击区域至少 44×44vp10.2 萌宠日记快捷操作栏总结设计要素值说明布局方式Row layoutWeight(1)等分 5 列图标大小48×48vp适中尺寸图标字号24fpEmoji 清晰显示标签字号12fp小号辅助文字圆角14vp圆角矩形图标-文字间距6vp紧凑排列操作项间距8vpRow 的 space 参数总结本文从萌宠日记的快捷操作图标网格布局实现出发深入解析了等分布局的完整方法数据驱动通过 QuickAction 接口定义操作项数据layoutWeight 等分Row layoutWeight(1) 实现均匀分布图标容器48×48vp 的圆角容器配以不同背景色标签文字12fp 小字号辅助文字交互反馈onClick 点击处理、clickEffect 涟漪效果响应式布局不同屏幕宽度下的自适应适配ForEach 渲染数据驱动 UI 的最佳实践无障碍适配accessibilityText 添加功能描述快捷操作栏是用户与功能模块交互的快捷入口合理的设计能显著提升应用的操作效率。下一篇我们将深入今日记录卡片与文本溢出处理解析首页中今日记录区的内容展示与文本截断。如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力相关资源Row 组件参考https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-rowlayoutWeight 属性https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-universal-attributes-layout-constraintsForEach 使用https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-foreach点击效果https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-universal-attributes-click-effect响应式布局指导https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/responsive-layout无障碍开发https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/accessibility-kit颜色使用规范https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/color-usage交互反馈设计https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/interaction-feedback

相关新闻

HarmonyOS应用开发实战:萌宠日记 - 参数化路由

HarmonyOS应用开发实战:萌宠日记 - 参数化路由

HarmonyOS应用开发实战:萌宠日记 - 参数化路由 前言 在 萌宠日记 中,参数化路由 是页面间数据传递的另一种重要方式。与 回调函数模式 不同,参数化路由通过 NavPathStack.pushPath 的 param 参数传递数据,目标页面在 NavDestinat…

2026/10/3 9:42:54 阅读更多 →
深入解析qsort与冒泡排序

深入解析qsort与冒泡排序

目录 一,qsort函数 二,模仿qsort函数,利用冒泡排序排序任意类型的数据 三,sizeof和strlen对比 四,指针例题 1,指针-整数 2,指针-指针 3,指针复杂计算案例 一,qsort…

2026/9/25 16:39:23 阅读更多 →
HarmonyOS应用开发实战:萌宠日记 - 自定义 TabBar 设计与图标渲染

HarmonyOS应用开发实战:萌宠日记 - 自定义 TabBar 设计与图标渲染

HarmonyOS应用开发实战:萌宠日记 - 自定义 TabBar 设计与图标渲染 前言 TabBar 是底部导航栏的 视觉呈现核心,它直接影响用户对应用的第一印象和操作体验。在 萌宠日记 中,我们使用 Builder 装饰器 自定义了 TabBar 的渲染方式,实…

2026/10/3 5:57:40 阅读更多 →

最新新闻

Hadoop电影推荐系统项目实战:从源码拆解到避坑指南

Hadoop电影推荐系统项目实战:从源码拆解到避坑指南

简介:基于 Hadoop 的电影推荐系统完整项目,覆盖数据采集、离线计算与在线推荐全流程,适合计算机相关专业学生用于毕业设计、课程设计或项目初期演示,也方便初学者进阶学习。项目含推荐算法、爬虫采集、Web展示与后台管理等功能模块…

2026/10/3 9:42:09 阅读更多 →
03_01_24项目复盘:数据库升级与凌晨迁移的流程控制与坑点

03_01_24项目复盘:数据库升级与凌晨迁移的流程控制与坑点

1. 为什么用“03_01_24”当项目代号 先把这个标题拆开来看: 03_01_24 不是随便敲的一串字符,在我这里它代表 2024年3月1日24:00 启动的一个维护窗口项目。按惯例,这种以时间戳命名的项目基本不用记业务名称,直接看编号就知道是…

2026/10/3 9:42:09 阅读更多 →
跨架构离线交付:Docker pull 指定架构镜像保存与加载实践

跨架构离线交付:Docker pull 指定架构镜像保存与加载实践

在做离线交付和跨架构部署时,Docker 拉取指定架构镜像再保存到本地,是绕不开的一步。很多人刚开始接触这个操作时,以为 docker pull 拉下来的镜像就一定能在目标机器上跑,结果 docker save 打包带过去,一运行就报 exec…

2026/10/3 9:42:09 阅读更多 →
给LLM Agent装上后视镜:基于MCP与Docker的时序记忆系统实战

给LLM Agent装上后视镜:基于MCP与Docker的时序记忆系统实战

1. 从“hindsight”说起:为什么我们需要给Agent装一个“后视镜”“hindsight”这个词本身很有意思,字面意思是“事后的洞察力”,也就是我们常说的“后见之明”。放在AI Agent的语境里,它指向一个非常具体且关键的问题:…

2026/10/3 9:42:09 阅读更多 →
AURIX TC3xx PMS电源管理解析:复位与低功耗避坑指南

AURIX TC3xx PMS电源管理解析:复位与低功耗避坑指南

做AURIX TC3xx开发这几年,我踩过最隐蔽的坑基本都集中在PMS,也就是Power Management System。很多人刚开始接触这颗芯片时,习惯性地把它当成普通MCU来用:上电、配时钟、初始化外设,一切正常,直到某天发现芯…

2026/10/3 9:42:09 阅读更多 →
Agent记忆系统实战:基于MCP与Docker的hindsight方案

Agent记忆系统实战:基于MCP与Docker的hindsight方案

1. 从“hindsight”说起:为什么记忆是 Agent 落地的最后一公里第一次看到 “hindsight” 这个词,是在一个做智能体(Agent)的朋友群里。有人丢了一张截图,说他们的 Agent 在连续对话到第 40 轮之后开始“胡言乱语”&…

2026/10/3 9:41:09 阅读更多 →

日新闻

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南 【免费下载链接】ex-skill 前任 skill 项目地址: https://gitcode.com/gh_mirrors/exsk/ex-skill 前任.skill 是一个运行在 Claude Code 上的开源 Skill:导入微信、iMessage、短信、…

2026/10/3 0:00:27 阅读更多 →
45个经典Linux面试题:从命令到网络排障的完整考点解析

45个经典Linux面试题:从命令到网络排障的完整考点解析

刚开始带应届生的时候,我最头疼的就是他们拿着一摞Linux面试题背得滚瓜烂熟,一上机全露馅。后来自己从被面的人变成面别人的人,才慢慢摸清楚:Linux面试题考的根本不是答案本身,而是你面对一个不确定的系统问题时&#…

2026/10/3 0:01:28 阅读更多 →
SAP生产预留实战指南:MB21/MB23/MB25协同与MRP集成

SAP生产预留实战指南:MB21/MB23/MB25协同与MRP集成

简介:本资源是一份面向SAP ABAP开发人员、生产计划专员及ERP实施顾问的实操型操作指南,聚焦SAP生产预留核心业务场景,系统解决物料预留创建、查询、校验与批量处理等高频问题。文档以结构化方式覆盖预留背景原理、OMC2编码规则、工厂级参数配…

2026/10/3 0:01:28 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/3 9:14:33 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/1 19:41:40 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/3 9:42:31 阅读更多 →

月新闻

我发现了一个新思路:用 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/2 10:36:31 阅读更多 →
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/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练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/3 9:42:36 阅读更多 →