HarmonyOS应用《玄象》开发实战:九宫格功能入口:Grid / GridItem / columnsTemplate(‘1fr 1fr 1fr‘)
阅读时长约 20 分钟 | 难度★★★★☆ | 篇章第 3 篇 · 首页与功能导航对应源码entry/src/main/ets/pages/HomePage.ets中的FeatureGridBuilder前言九宫格是移动端首页的经典布局——玄象项目首页用 3×3 网格展示星宿、周易、命理、风水、节气、月相、乐律、地理、取名 9 大功能入口。这套视觉通过 ArkUI 的Grid容器配合columnsTemplate(1fr 1fr 1fr)等分三列实现。本篇将深入剖析玄象项目FeatureGrid的实现细节从features数据数组、Grid/GridItem容器关系、columnsTemplate等分模板、rowsGap/columnsGap间距控制到数据驱动的功能入口设计。掌握这套九宫格布局方法论您就能为任何 HarmonyOS 应用打造规整的功能入口。提示玄象项目九宫格采用数据驱动渲染模式——所有功能项定义在数组中UI 通过ForEach自动渲染。新增功能只需修改数组。一、FeatureGrid 完整源码1.1 features 数组定义interfaceFeatureItem{name:string;icon:string;page:string;}privatefeatures:FeatureItem[][{name:星宿,icon:,page:pages/mansion/MansionListPage},{name:周易,icon:☰,page:pages/yijing/YijingHomePage},{name:命理,icon:◈,page:pages/mingli/BaziInputPage},{name:风水,icon:◎,page:pages/fengshui/FengshuiHomePage},{name:节气,icon:节,page:pages/astronomy/SolarTermsPage},{name:月相,icon:☽,page:pages/astronomy/MoonPhasesPage},{name:乐律,icon:,page:pages/music/MusicTwelveLawsPage},{name:地理,icon:⊕,page:pages/geography/NineProvincesPage},{name:取名,icon:名,page:pages/naming/AiNamingPage}];1.2 FeatureGrid BuilderBuilderFeatureGrid(){Grid(){ForEach(this.features,(item:FeatureItem){GridItem(){Column({space:8}){Text(item.icon).fontSize(28).fontColor(Colors.PRIMARY_GOLD)Text(item.name).fontSize(16).fontColor(Colors.PRIMARY_GOLD)}.width(100%).height(80).justifyContent(FlexAlign.Center).backgroundColor(Colors.BG_CARD).border({width:1,color:Colors.BG_CARD_BORDER,radius:12}).borderRadius(12).onClick((){router.pushUrl({url:item.page});})}},(item:FeatureItem)item.name)}.columnsTemplate(1fr 1fr 1fr).rowsGap(12).columnsGap(12).width(100%).height(280)}二、FeatureItem 接口设计2.1 接口定义interfaceFeatureItem{name:string;// 功能名称icon:string;// 图标emoji 或字符page:string;// 跳转页面路由}2.2 数据驱动的优势优势说明可扩展新增功能只需修改 features 数组可维护数据与 UI 解耦可测试数组易于断言三、Grid 容器详解3.1 Grid 关键属性Grid(){...}.columnsTemplate(1fr 1fr 1fr).rowsGap(12).columnsGap(12).width(100%).height(280)属性值含义columnsTemplate1fr 1fr 1fr三列等分rowsGap12行间距 12vpcolumnsGap12列间距 12vpwidth100%占满父容器宽度height280固定高度 280vp3.2 columnsTemplate 等分模板1fr 1fr 1fr表示三列每列占 1 份fraction。┌─────┬─────┬─────┐ │ 1fr │ 1fr │ 1fr │ └─────┴─────┴─────┘3.3 其他模板示例// 两列等分.columnsTemplate(1fr 1fr)// 四列等分.columnsTemplate(1fr 1fr 1fr 1fr)// 固定宽度列.columnsTemplate(100px 1fr 100px)// 比例列.columnsTemplate(1fr 2fr 1fr)3.4 rowsGap 与 columnsGapcolumnsGap 12 rowsGap 12 ↓ ↓ ┌──┬12┬──┬12┬──┐ │ │ │ │ │ │ ← row 1 └──┴──┴──┴──┴──┘ ↑ 12 ↑ ↑ ┌──┬──┬──┬──┬──┐ │ │ │ │ │ │ ← row 2 └──┴──┴──┴──┴──┘四、GridItem 单元格4.1 GridItem 容器GridItem(){Column({space:8}){// 单元格内容}}GridItem是Grid的子元素每个GridItem占一个网格单元。4.2 单元格内容Column({space:8}){Text(item.icon).fontSize(28).fontColor(Colors.PRIMARY_GOLD)Text(item.name).fontSize(16).fontColor(Colors.PRIMARY_GOLD)}.width(100%).height(80).justifyContent(FlexAlign.Center).backgroundColor(Colors.BG_CARD).border({width:1,color:Colors.BG_CARD_BORDER,radius:12}).borderRadius(12)4.3 单元格样式属性值含义width100%占满 GridItemheight80固定高度 80vpjustifyContentFlexAlign.Center内容垂直居中backgroundColorColors.BG_CARD卡片背景border{ width: 1, color: BG_CARD_BORDER, radius: 12 }边框borderRadius12圆角五、onClick 路由跳转5.1 跳转实现.onClick((){router.pushUrl({url:item.page});})每个功能入口点击后调用router.pushUrl跳转到对应页面。5.2 九宫格路由映射名称路由星宿pages/mansion/MansionListPage周易pages/yijing/YijingHomePage命理pages/mingli/BaziInputPage风水pages/fengshui/FengshuiHomePage节气pages/astronomy/SolarTermsPage月相pages/astronomy/MoonPhasesPage乐律pages/music/MusicTwelveLawsPage地理pages/geography/NineProvincesPage取名pages/naming/AiNamingPage六、九宫格布局视觉6.1 完整布局┌────────┬────────┬────────┐ │ 星宿 │ 周易 │ 命理 │ ├────────┼────────┼────────┤ │ 风水 │ 节气 │ 月相 │ ├────────┼────────┼────────┤ │ 乐律 │ 地理 │ 取名 │ └────────┴────────┴────────┘6.2 尺寸计算Grid 宽度 100% (假设屏幕宽 360vp) Grid 高度 280vp columnsGap 12vp, rowsGap 12vp 每列宽度 (360 - 24) / 3 112vp 每行高度 (280 - 24) / 3 85.33vp 单元格 height 80vp小于行高七、ForEach 数据驱动渲染7.1 ForEach 在 Grid 中的应用Grid(){ForEach(this.features,(item:FeatureItem){GridItem(){...}},(item:FeatureItem)item.name)}7.2 渲染流程features 数组 (9 项) ↓ ForEach 遍历 ↓ 为每个 item 生成 GridItem ↓ Grid 按列模板排列 ↓ 3×3 网格呈现八、九宫格的扩展方向8.1 添加更多功能privatefeatures:FeatureItem[][// 原有 9 项{name:AI助手,icon:,page:pages/assistant/AiAssistantPage}// 第 10 项];新增第 10 项后Grid 自动变为 4×3 1 布局。8.2 添加角标Badge({count:this.notificationCount,position:BadgePosition.RightTop}){Text(item.icon)...}8.3 添加长按菜单Text(item.icon).gesture(LongPressGesture().onAction((){this.showFeatureMenu(item);}))九、玄象项目九宫格设计要点9.1 数据驱动玄象项目所有功能入口定义在features数组中UI 自动渲染。9.2 一致性所有九宫格单元遵循统一视觉规范字体颜色Colors.PRIMARY_GOLD背景Colors.BG_CARD边框Colors.BG_CARD_BORDER圆角12vp9.3 可扩展性新增功能无需修改build方法只需修改features数组。十、Grid 与 List 的选择10.1 Grid 适用场景固定列数的网格布局功能入口、相册、商品展示10.2 List 适用场景单列或多列流式布局长列表、聊天记录玄象项目九宫格列数固定为 3使用Grid最合适。九、Grid 常见问题9.1 Grid 与 List 的性能对比场景GridList玄象项目选择固定列数网格✓ 最优需手动计算Grid九宫格长列表滚动不支持✓ 最优List星宿列表混合列数不支持✓ 灵活List9.2 Grid 的响应式适配玄象项目的 Grid 使用1fr单位实现等分列宽Grid().columnsTemplate(1fr 1fr 1fr)// 三列等分.rowsGap(12).columnsGap(12)若需适配不同屏幕宽度可动态计算列数privategetColumns():string{constscreenWidththis.getScreenWidth();if(screenWidth720)return1fr 1fr 1fr 1fr;// 平板if(screenWidth400)return1fr 1fr 1fr;// 手机return1fr 1fr;// 小屏手机}9.3 GridItem 的点击反馈玄象项目九宫格单元点击后跳转至对应功能页。未来可增加点击状态反馈点击时缩放动画scale属性从 1 到 0.95点击时背景色变化从BG_CARD到BG_CARD_HIGHLIGHT点击后路由跳转至目标页面9.4 Grid 的视觉设计建议设计维度玄象项目取值最佳实践建议列数3 列不超过 4 列行间距12vp8~16vp列间距12vp8~16vp单元格高度80vp64~96vp圆角12vp8~16vp总结本篇以玄象项目九宫格功能入口为蓝本深入剖析了 ArkUI 网格布局从features数据数组、FeatureItem接口设计、Grid容器、GridItem单元格、columnsTemplate(1fr 1fr 1fr)等分模板、rowsGap/columnsGap间距控制到onClick路由跳转与数据驱动渲染。掌握这套九宫格布局方法论您就能为任何 HarmonyOS 应用打造规整的功能入口。下一篇《26 · router.pushUrl 路由跳转与 main_pages.json 路由表注册》将带您深入玄象项目路由跳转的核心机制。如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力相关资源HarmonyOS 官方文档Grid 组件HarmonyOS 官方文档GridItem 组件HarmonyOS 官方文档columnsTemplate开源鸿蒙跨平台社区https://openharmonycrossplatform.csdn.net

相关新闻

【Springboot毕设全套源码+文档】基于spring boot的调查问卷系统的设计与实现(丰富项目+远程调试+讲解+定制)

【Springboot毕设全套源码+文档】基于spring boot的调查问卷系统的设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/10/19 0:05:31 阅读更多 →
如何为旧款iPhone降级系统:Legacy-iOS-Kit终极指南

如何为旧款iPhone降级系统:Legacy-iOS-Kit终极指南

如何为旧款iPhone降级系统:Legacy-iOS-Kit终极指南 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit 你知…

2026/10/20 7:27:32 阅读更多 →
【Springboot毕设全套源码+文档】基于SpringBoot前后端分离的宠物服务平台的设计与实现(丰富项目+远程调试+讲解+定制)

【Springboot毕设全套源码+文档】基于SpringBoot前后端分离的宠物服务平台的设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/10/17 5:06:31 阅读更多 →

最新新闻

AI应用开发中Skill复用的维护成本与治理策略

AI应用开发中Skill复用的维护成本与治理策略

1. 从"能跑就行"到"改一处崩三处":Skill复用的隐性成本 刚接触AI应用开发那会儿,我对"Skill复用"这件事的理解特别朴素——把一段能跑通的提示词逻辑或者工具调用链封装起来,下次遇到类似场景直接拿来用&#…

2026/10/20 14:28:24 阅读更多 →
LeRobot与IsaacLab Arena集成:机器人模仿学习仿真训练实战

LeRobot与IsaacLab Arena集成:机器人模仿学习仿真训练实战

做机器人学习的同学应该都有同感:真实机器人上采集一条高质量轨迹,远比想象中费时间。机械臂要复位、道具要摆回原位、标定稍微漂一点,一条episode就废了。一天下来攒不出多少有效数据,而LeRobot这类模仿学习框架偏偏最需要数据。…

2026/10/20 14:28:24 阅读更多 →
移动端自动化测试:LLM多角色拆分架构与实操指南

移动端自动化测试:LLM多角色拆分架构与实操指南

1. 移动端自动化测试的模型拆分困局做过移动端自动化的人都有一个共同感受:脚本写起来不难,难的是让它稳定跑下去。UI 元素定位漂移、页面加载时序不确定、不同机型渲染差异,这些问题叠加在一起,传统基于固定选择器的脚本维护成本…

2026/10/20 14:28:24 阅读更多 →
移动端自动化测试:角色级模型拆分实战与踩坑总结

移动端自动化测试:角色级模型拆分实战与踩坑总结

移动端自动化测试这块,我前前后后折腾了快三年,从最早的 Appium 脚本堆到后来的图像识别方案,踩过的坑能写满一个笔记本。去年开始把大模型接进测试链路之后,有个问题一直卡着我:单模型跑全流程,准确率上不…

2026/10/20 14:28:24 阅读更多 →
LangChain应用安全实战:提示注入与数据泄露防护指南

LangChain应用安全实战:提示注入与数据泄露防护指南

1. 为什么LangChain应用必须把安全当回事刚开始接触LangChain的时候,我和大多数人一样,满脑子想的都是怎么用chain怼工作流、怎么接各种工具、怎么能少写点胶水代码。真正让我意识到问题严重的,是某次在一个demo里给Agent接了数据库查询工具之…

2026/10/20 14:28:24 阅读更多 →
C#上位机运动控制框架:配置、板卡与权限解耦实践

C#上位机运动控制框架:配置、板卡与权限解耦实践

做上位机运动控制这些年,我见过太多项目死在"代码改不动"上。设备跑起来没问题,一旦客户换板卡、加轴、改权限,整个程序就得动手术。最开始我手头这套C#源码框架也一样,轴坐标写死在窗体里、板卡函数散落在各个按钮事件…

2026/10/20 14:27:19 阅读更多 →

日新闻

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/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

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

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在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 阅读更多 →