尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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
RELATED

相关推荐

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

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

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

📅 2026/9/24 21:08:09
深入解析qsort与冒泡排序

深入解析qsort与冒泡排序

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

📅 2026/9/9 23:19:21
IT66313:HDMI 2.1 Retimer

IT66313:HDMI 2.1 Retimer

IT66313 是一种单输入单输出的 HDMI 重定时缓冲器,支持每信道最高 12Gbps 的信令传输速率。它符合最新的HDMI 2.1b规范,并且向下兼容HDMI 1.4b/2.0b规范。凭借48 Gbps/4频道能力,IT66313支持超高分辨率内容流,如超高清8Kx4K格式。…

📅 2026/9/20 14:01:59
MORE NEWS

更多资讯

📰

开源AI模型实践指南:从选型、部署到调优的完整路线图

说句实话,这个标题我们自己写出来都有点不好意思。“全网最全”四个字,放在任何一个正经技术社区里,都容易被人挂起来嘲讽。但最后我们还是用了,而且把整个文档仓库直接开源了。原因很简单:我们在整理这份 AI 开源模型…

📰

溯源图APT攻击检测优化:从建图到因果回溯的实战指南

简介:这份资源是2023年华中科技大学计算机学院毕业设计项目,主题为基于溯源图的APT攻击检测方法优化,面向网络安全方向的学生、研究人员及对高级持续性威胁检测感兴趣的开发者。项目围绕溯源图技术展开,尝试通过优化检测流程提升对…

📰

为什么安全设备天天报警却抓不到攻击者?深入解析误报、漏报与威胁研判

引言 在数字化转型加速的当下,网络安全已成为企业核心竞争力。企业与政府机构普遍部署了多层安全设备,包括下一代防火墙(NGFW)、入侵检测/防御系统(IDS/IPS)、终端检测与响应(EDR/XDR&#xff0…

📰

Java String类底层原理与高频面试题全解析

1. 从一道题开始,聊聊String到底怎么学 不要小看“String类基础题目”这组关键词。我在带新人、帮朋友做面试复盘时发现一个很反常的现象:绝大多数人看到字符串题目都觉得自己会,真正落笔写结论时,能全对的不到三分之一。不是语法…

📰

ISO 6505-2021压入法硬度测试全流程解析:从原理到质量控制

简介:ISO 6505-2021《金属材料 硬度试验》国际标准最新版PDF文档,面向材料检测、机械制造、质量控制等领域的工程师与研究人员,系统解决了金属材料硬度测试方法不统一、结果可比性差的问题。标准主要规定布氏、洛氏、维氏等压入法硬度测试的适…

📰

Python循环语句在游戏测试自动化中的实战应用

做游戏测试,绕不开Python。而Python循环语句,又是所有自动化脚本里最基础也最常用的那块地基。不管是模拟连续按键、卡点采集帧率、遍历场景角色状态,还是跑通一套冒烟测试流程,本质上都是在跟“循环”打交道。如果你正想入门游戏…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬