HarmonyOS ArkUI Grid 网格布局:固定列、自适应列与跨列 GridItem
系列鸿蒙 HarmonyOS 6.1 新特性实战 · 第 48 篇Grid 是 ArkUI 中专为二维网格场景设计的布局容器配合 GridItem 使用可以轻松实现商品列表、图片墙、仪表盘等经典界面。与 Column/Row 的一维排列不同Grid 通过columnsTemplate和rowsTemplate精确定义每列每行的尺寸比例并支持 GridItem 跨列/跨行占据多个格子。本篇通过商品网格与横幅跨列两个实战示例讲透 Grid 的核心用法。运行效果初始状态2 列等宽商品网格切换为 3 列自适应模式横幅 GridItem 横跨两列columnsTemplate 与 rowsGap/columnsGapcolumnsTemplate是 Grid 的核心属性使用空格分隔的 fr 单位字符串定义每一列的宽度比例与 CSS Grid 的grid-template-columns一脉相承// 2 列等宽商品网格 Grid() { GridItem() { Column({ space: 8 }) { Text().fontSize(48) Text(无线耳机).fontSize(13).fontColor(#333) Text(¥299) .fontSize(14).fontColor(#e74c3c) .fontWeight(FontWeight.Bold) } .width(100%).padding(12) .backgroundColor(#fff).borderRadius(8) .alignItems(HorizontalAlign.Center) } GridItem() { Column({ space: 8 }) { Text().fontSize(48) Text(智能手表).fontSize(13).fontColor(#333) Text(¥599) .fontSize(14).fontColor(#e74c3c) .fontWeight(FontWeight.Bold) } .width(100%).padding(12) .backgroundColor(#fff).borderRadius(8) .alignItems(HorizontalAlign.Center) } GridItem() { Column({ space: 8 }) { Text().fontSize(48) Text(平板电脑).fontSize(13).fontColor(#333) Text(¥1299) .fontSize(14).fontColor(#e74c3c) .fontWeight(FontWeight.Bold) } .width(100%).padding(12) .backgroundColor(#fff).borderRadius(8) .alignItems(HorizontalAlign.Center) } GridItem() { Column({ space: 8 }) { Text().fontSize(48) Text(游戏手柄).fontSize(13).fontColor(#333) Text(¥199) .fontSize(14).fontColor(#e74c3c) .fontWeight(FontWeight.Bold) } .width(100%).padding(12) .backgroundColor(#fff).borderRadius(8) .alignItems(HorizontalAlign.Center) } } .columnsTemplate(1fr 1fr) // 2 列等宽 .columnsGap(12) // 列间距 12vp .rowsGap(12) // 行间距 12vp .width(100%) .backgroundColor(#f5f5f5) .padding(12)1fr 1fr表示 2 列等宽1fr 2fr 1fr表示 3 列中间列是两侧列宽度的 2 倍120vp 1fr表示左列固定 120vp右列占满剩余空间。rowsTemplate同理控制行高若省略则行高由内容决定自动扩展。GridItem 跨列columnStart 与 columnEnd横幅、广告位等需要横跨多列的场景通过 GridItem 的columnStart和columnEnd属性实现Grid() { // 横幅跨越 0、1 两列columnsTemplate 为 2 列时 GridItem() { Text(Banner 横幅——限时特惠) .width(100%).height(100) .backgroundColor(#0066ff).fontColor(#fff) .textAlign(TextAlign.Center).fontSize(16) .borderRadius(8) } .columnStart(0).columnEnd(1) // 0-indexedinclusive跨越第 0 和第 1 列 // 普通商品格子 GridItem() { Column({ space: 6 }) { Text(⌚).fontSize(36) Text(智能手表).fontSize(12).fontColor(#333) Text(¥399).fontSize(13).fontColor(#e74c3c).fontWeight(FontWeight.Bold) } .width(100%).padding(10).backgroundColor(#fff).borderRadius(8) .alignItems(HorizontalAlign.Center) } GridItem() { Column({ space: 6 }) { Text().fontSize(36) Text(蓝牙音箱).fontSize(12).fontColor(#333) Text(¥179).fontSize(13).fontColor(#e74c3c).fontWeight(FontWeight.Bold) } .width(100%).padding(10).backgroundColor(#fff).borderRadius(8) .alignItems(HorizontalAlign.Center) } } .columnsTemplate(1fr 1fr) .columnsGap(12).rowsGap(12) .width(100%).backgroundColor(#f5f5f5).padding(12)columnStart和columnEnd均为 0 起始索引且columnEnd包含该列inclusive。若columnsTemplate是1fr 1fr 1fr3 列则跨全行需设.columnStart(0).columnEnd(2)。rowStart和rowEnd可类比用于跨行。Grid vs List选型指南两者在列表场景下经常被拿来比较// Grid二维布局适合商品网格、图片墙 Grid() { ForEach(products, (product: Product) { GridItem() { ProductCard({ product: product }) } }) } .columnsTemplate(1fr 1fr) .columnsGap(12).rowsGap(12) .width(100%) // List一维列表适合消息列表、设置项 List({ space: 12 }) { ForEach(messages, (msg: Message) { ListItem() { MessageRow({ msg: msg }) } }) } .width(100%)Grid 适合二维场景商品网格、图片墙、仪表盘卡片List 适合一维场景消息流、设置列表、时间轴。若需要高度不固定的瀑布流效果应使用 WaterFlow见第 49 篇。完整代码class ProductItem { icon: string name: string price: string } Entry Component struct GridDemo { State colCount: number 2 State template: string 1fr 1fr private products: ProductItem[] [ { icon: , name: 无线耳机, price: ¥299 }, { icon: , name: 智能手表, price: ¥599 }, { icon: , name: 平板电脑, price: ¥1299 }, { icon: , name: 游戏手柄, price: ¥199 }, { icon: , name: 运动相机, price: ¥899 }, { icon: , name: 蓝牙音箱, price: ¥179 }, ] Builder ProductCard(item: ProductItem) { Column({ space: 8 }) { Text(item.icon).fontSize(40) Text(item.name).fontSize(13).fontColor(#333) Text(item.price) .fontSize(14).fontColor(#e74c3c) .fontWeight(FontWeight.Bold) } .width(100%).padding(12) .backgroundColor(#fff).borderRadius(8) .alignItems(HorizontalAlign.Center) } build() { Column({ space: 16 }) { // 标题 Text(Grid 网格布局演示) .fontSize(16).fontWeight(FontWeight.Bold).fontColor(#1a1a1a) // 切换列数 Row({ space: 12 }) { Button(2 列).height(36) .backgroundColor(this.colCount 2 ? #0066ff : #e0e0e0) .fontColor(this.colCount 2 ? #fff : #333) .onClick(() { this.colCount 2 this.template 1fr 1fr }) Button(3 列).height(36) .backgroundColor(this.colCount 3 ? #0066ff : #e0e0e0) .fontColor(this.colCount 3 ? #fff : #333) .onClick(() { this.colCount 3 this.template 1fr 1fr 1fr }) } // Banner 跨列演示 Text(跨列 Banner 商品网格) .fontSize(14).fontColor(#666) Grid() { // 横幅跨全部列 GridItem() { Text(限时特惠 · 全场满 300 减 50) .width(100%).height(80) .backgroundColor(#0066ff).fontColor(#fff) .textAlign(TextAlign.Center).fontSize(15) .borderRadius(8) } .columnStart(0) .columnEnd(this.colCount - 1) // 商品列表 ForEach(this.products, (item: ProductItem) { GridItem() { this.ProductCard(item) } }) } .columnsTemplate(this.template) .columnsGap(10).rowsGap(10) .width(100%) .backgroundColor(#f5f5f5).padding(10) } .width(100%).padding(16) .backgroundColor(#ffffff) } }API 速查属性/方法说明.columnsTemplate(string)列宽模板如1fr 1fr、120vp 1fr空格分隔.rowsTemplate(string)行高模板省略时行高由内容自动决定.columnsGap(number)列间距单位 vp.rowsGap(number)行间距单位 vpGridItem.columnStart(number)跨列起始列索引0 起始GridItem.columnEnd(number)跨列结束列索引包含0 起始GridItem.rowStart(number)跨行起始行索引GridItem.rowEnd(number)跨行结束行索引包含小结columnsTemplate用 fr 单位字符串定义列数和列宽比例是 Grid 布局的核心属性columnsGap和rowsGap分别控制列间距和行间距比 padding/margin 更语义化columnStart/columnEnd实现跨列索引从 0 开始且 columnEnd 为包含值省略rowsTemplate时行高由 GridItem 内容决定适合高度不一致的商品卡片不要将自定义类或结构体命名为GridItem会与 ArkUI 内置组件名冲突Grid 适合二维网格List 适合一维列表高度不一致的瀑布流用 WaterFlow第 49 篇上一篇Flex 弹性布局完全指南 | 下一篇WaterFlow 瀑布流布局实战

相关新闻

51单片机最小系统避坑指南:从焊接工艺到硬件调试全流程解析

51单片机最小系统避坑指南:从焊接工艺到硬件调试全流程解析

你老师让你焊一个最小系统,你焊出来一坨锡球比芯片还大,上电直接冒火花。这场景是不是听着就头皮发麻?别笑,这几乎是每个硬件新手都会经历的“入门礼”。从一堆零散的元器件,到一块能稳定运行的最小系统板,…

2026/7/26 3:23:41 阅读更多 →
Codex Skills开发指南:从入门到企业级部署

Codex Skills开发指南:从入门到企业级部署

1. Codex Skills 核心概念解析 Codex Skills 是一种为智能体(如 ChatGPT Work 和 Codex CLI)扩展能力的模块化方案。简单来说,它就像给智能体安装了一个个"技能芯片",让AI能够按照预设的工作流执行特定任务。与普通提示…

2026/7/26 5:03:59 阅读更多 →
单片机最小系统焊接实战:从零到一的安全指南与调试技巧

单片机最小系统焊接实战:从零到一的安全指南与调试技巧

1. 这篇文章真正要解决的问题如果你是一名电子、自动化或嵌入式相关专业的学生,那么“焊接单片机最小系统板”这个课程实验或毕业设计任务,大概率是你绕不开的“新手村BOSS”。老师的要求听起来很简单:照着原理图,把单片机、晶振、…

2026/7/25 22:23:58 阅读更多 →

最新新闻

Obsidian科研笔记系统终极指南:5大核心功能打造高效个人知识管理体系

Obsidian科研笔记系统终极指南:5大核心功能打造高效个人知识管理体系

Obsidian科研笔记系统终极指南:5大核心功能打造高效个人知识管理体系 【免费下载链接】obsidian_vault_template_for_researcher This is an vault template for researchers using obsidian. 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian_vault_templa…

2026/7/26 16:47:54 阅读更多 →
Ubuntu浏览器卸载与软件管理全指南

Ubuntu浏览器卸载与软件管理全指南

1. Ubuntu下浏览器卸载与软件管理全指南在Linux桌面环境中,浏览器作为日常使用最频繁的应用程序之一,其安装和卸载的规范操作直接影响系统稳定性。最近在维护Ubuntu 22.04 LTS系统时,发现通过非标准方式安装的Opera浏览器产生了大量残留配置&…

2026/7/26 16:47:54 阅读更多 →
如何通过misakaX快速解锁iOS终极自定义功能:完全免费指南

如何通过misakaX快速解锁iOS终极自定义功能:完全免费指南

如何通过misakaX快速解锁iOS终极自定义功能:完全免费指南 【免费下载链接】misakaX iOS /iPadOS 16.0 - 18.0 / 18.1 beta 4, An ultimate customization tool, uilitizing the bug that makes TrollRestore possible. 项目地址: https://gitcode.com/gh_mirrors/…

2026/7/26 16:47:54 阅读更多 →
Docker多架构镜像构建实战与优化指南

Docker多架构镜像构建实战与优化指南

1. 为什么需要多架构镜像?第一次在树莓派上拉取x86架构的Docker镜像时,那个经典的"exec format error"错误让我记忆犹新。当时才真正意识到,在混合架构环境中,多架构镜像不是锦上添花,而是刚需。随着ARM架构…

2026/7/26 16:47:54 阅读更多 →
我把Zorin OS改造成Win11界面了,很丝滑

我把Zorin OS改造成Win11界面了,很丝滑

作为一名长期使用Linux的科技爱好者,我一直推荐Zorin OS给那些想从Windows过渡到开源系统的朋友。它基于稳定可靠的Ubuntu内核,继承了优秀的兼容性和软件生态,同时在桌面环境上进行了深度优化,让新手也能快速上手。 Zorin OS的核心亮点在于其高度可定制的桌面布局。官方提…

2026/7/26 16:47:54 阅读更多 →
libmatoya 示例程序解析:0-minimal 与 2-threaded 案例深度剖析

libmatoya 示例程序解析:0-minimal 与 2-threaded 案例深度剖析

libmatoya 示例程序解析:0-minimal 与 2-threaded 案例深度剖析 【免费下载链接】libmatoya Cross-platform application development. 项目地址: https://gitcode.com/gh_mirrors/li/libmatoya libmatoya 是一个强大的跨平台应用开发框架,通过简…

2026/7/26 16:46:54 阅读更多 →

日新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/26 0:00:31 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/26 0:00:31 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/26 0:00:31 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/26 0:00:31 阅读更多 →

月新闻