仓颉 ArkUI GridItem 组件详解:网格单项定位、行列跨度与实战示例
文档知识库教程OpenHarmony【免费下载链接】CangjieCorpus本仓库为仓颉编程语言语料库聚焦 仓颉编程语言 核心知识体系整合官方开发指南、API 文档、典型代码示例及语法规范等多维度资源经结构化处理与专业标注构建为支持 RAG检索增强生成技术 的高质量知识基座适配智能编码助手、学习辅助工具等应用开发需求。 欢迎开发者基于本语料库构建仓颉语言智能应用推动鸿蒙开发生态智能化升级项目地址https://gitcode.com/Cangjie/CangjieCorpus点击查看免费下载导读GridItem 是仓颉 ArkUI 网格布局中“网格容器内单项内容”的容器组件是构建九宫格、日历、图片墙、服务入口等二维网格界面的基础单元。本文以 OpenHarmony 仓颉 ArkUI 官方参考文档为核心完整解析 GridItem 的两种构造方式、rowStart / rowEnd / columnStart / columnEnd 四个位置属性及其取值约束并结合 Grid 容器、ForEach 循环渲染与 LazyForEach 懒加载的配合方式给出可直接运行的仓颉示例代码与源码级实现依据。读完本文你将掌握如何让单个网格项横跨多行多列、如何编排网格自身的行列布局以及在大数据量网格场景下的性能优化手段。GridItem 组件定位与使用前提GridItem 是网格容器 Grid 中承载单项内容的容器组件。它本身不负责网格的行列划分而是与 Grid 容器配合完成“由行和列分割的单元格”式二维布局——Grid 负责行列数量、尺寸占比、间距与滚动方向GridItem 负责单个单元格内的内容组织及其在网格中的位置与跨行跨列范围。依据官方参考文档GridItem 的使用存在以下强约束仅支持作为 Grid 组件的子组件使用不能脱离 Grid 独立存在当 GridItem 配合 LazyForEach 使用时GridItem 子组件在 GridItem创建时即创建当 GridItem 配合 if/else、ForEach 使用或 GridItem 的父组件为 Grid 时GridItem 子组件在GridItem 布局时创建。这一创建时机的差异直接影响数据量较大场景下的性能使用 LazyForEach 时按需创建、滑出可视区即回收而使用 ForEach 时则会一次性展开全部子组件。可参考 创建网格Grid/GridItem 中的说明网格布局由“行”和“列”分割的单元格组成通过指定“项目”所在单元格即可做出灵活多样的布局典型场景包括九宫格图片展示、日历、计算器等。导入模块GridItem 归属于 ArkUI 声明式组件体系使用前需导入模块import kit.ArkUI.*子组件规则GridItem 内可以包含单个子组件。也就是说一个 GridItem 只能承载一个直接子组件如 Text、Image 或自定义组件若需在单元格内呈现多个元素应通过 Column / Row / Stack 等布局容器将其包裹为一个根组件。创建组件两种构造方式GridItem 提供两个构造函数重载均要求系统能力SystemCapability.ArkUI.ArkUI.Full起始版本为22。init()public init()创建一个不包含子组件的网格单项内容组件。此构造用于仅需占位、或后续再动态填充内容的场景。init(() - Unit)public init(child: () - Unit)创建一个可包含子组件的网格单项内容组件参数说明如下参数名类型必填默认值说明child() - Unit是-GridItem 容器的子组件。child为尾随闭包形式的组件构建函数在其中声明 GridItem 的唯一子组件例如GridItem() { Text(会议) }。组件属性网格项的跨行跨列定位GridItem 通过rowStart、rowEnd、columnStart、columnEnd四个属性定义自身在网格中的位置与所占行列范围四者均返回This以支持链式调用且都要求系统能力SystemCapability.ArkUI.ArkUI.Full、起始版本 22。参数类型统一为?Int32可空 Int32必填。func columnEnd(?Int32)public func columnEnd(value: ?Int32): This设置当前元素终点列号与columnStart配套使用。参数名类型必填默认值说明value?Int32是-当前元素终点列号与 columnStart 配套使用。取值范围[0, 总列数-1]。初始值0func columnStart(?Int32)public func columnStart(value: ?Int32): This设置当前元素起始列号与columnEnd配套使用。参数名类型必填默认值说明value?Int32是-当前元素起始列号与 columnEnd 配套使用。取值范围[0, 总列数-1]。初始值0func rowEnd(?Int32)public func rowEnd(value: ?Int32): This设置当前元素终点行号与rowStart配套使用。参数名类型必填默认值说明value?Int32是-当前元素终点行号与 rowStart 配套使用。取值范围[0, 总行数-1]。初始值0func rowStart(?Int32)public func rowStart(value: ?Int32): This设置当前元素起始行号与rowEnd配套使用。参数名类型必填默认值说明value?Int32是-当前元素起始行号与 rowEnd 配套使用。取值范围[0, 总行数-1]。初始值0使用要点行号、列号均从0开始计数最大值受 Grid 当前布局的总行数、总列数约束如总列数为 5则合法列号区间为 04四个属性必须成对使用才能准确表达跨行跨列范围横向跨度由columnStart与columnEnd共同界定纵向跨度由rowStart与rowEnd共同界定对于需要指定 GridItem 起始行列号和所占行列数的场景官方文档推荐改用 Grid 的 layoutOptions 参数GridLayoutOptions以便在网格容器层统一管理各单项的位置与跨度而非在每个 GridItem 上逐个设置属性GridItem 同样支持全部通用属性与通用事件例如.id()、.backgroundColor()、.width()、.height()、.textAlign()等可与位置属性自由组合。示例代码GridItem 设置自身位置官方示例演示了如何通过rowStart/rowEnd/columnStart/columnEnd让单个网格项跨越多行或多列同时用 ForEach 循环渲染其余网格项整体可运行于仓颉 ArkUI 工程包名ohos_app_cangjie_entrypackage ohos_app_cangjie_entry import kit.ArkUI.* import ohos.arkui.state_macro_manage.* import std.collection.{ArrayList, HashMap} Entry Component class EntryView { let scroller Scroller() State var numbers: ArrayListString ArrayList([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]) func build() { Column() { Grid { //指定当前GridItem组件的起始行号为1终点行号为4 GridItem { Text(4) .fontSize(16) .backgroundColor(0xFAEEE0) .width(100.percent) .height(100.percent) .textAlign(TextAlign.Center) .id(gridItem1) }.rowStart(1).rowEnd(4) //循环渲染Griditem标记为0-15 ForEach( this.numbers, itemGeneratorFunc: { num: String, idx: Int64 GridItem { Text(num) .fontSize(16) .backgroundColor(0xF9CF93) .width(100.percent) .height(100.percent) .textAlign(TextAlign.Center) } } ) //指定当前GridItem组件的起始列号为1终点列号为5 GridItem { Text(5) .fontSize(16) .backgroundColor(0xDBD0C0) .width(100.percent) .height(100.percent) .textAlign(TextAlign.Center) .id(gridItem2) }.columnStart(1).columnEnd(5) } .columnsTemplate(1fr 1fr 1fr 1fr 1fr) .rowsTemplate(1fr 1fr 1fr 1fr 1fr) .width(90.percent) .backgroundColor(0xFAEEE0) .height(300) }.width(100.percent).margin(top: 5) } }示例要点拆解网格规模Grid 通过.columnsTemplate(1fr 1fr 1fr 1fr 1fr)与.rowsTemplate(1fr 1fr 1fr 1fr 1fr)声明了一个5 行 5 列的网格且行列同时设置时 Grid 固定展示该范围内的元素、不可滚动纵向跨行编号为gridItem1的 GridItem 设置了.rowStart(1).rowEnd(4)在列位置默认 0 的前提下占据第 14 行、第 0 列形成 4 行高的纵向长条横向跨列编号为gridItem2的 GridItem 设置了.columnStart(1).columnEnd(5)在行位置默认 0 的前提下占据第 15 列、第 0 行形成 5 列宽的横向长条循环渲染剩余编号 015 的网格项由 ForEach 基于numbers数组循环生成itemGeneratorFunc的itemGeneratorFunc参数接收数组元素与索引num: String, idx: Int64返回的组件必须为 GridItemForEach 的父容器为 Grid返回子组件须是 Grid 允许的子组件单元格内容每个 GridItem 内的 Text 子组件通过.width(100.percent).height(100.percent)填满单元格.textAlign(TextAlign.Center)实现文字居中。与 Grid 容器协同行列模板与布局模式GridItem 的位置属性取值总列数、总行数由 Grid 的行列模板决定。Grid 支持 columnsTemplate / rowsTemplate 与columnsGap/rowsGap等属性其中columnsTemplate/rowsTemplate为形如1fr 1fr 2fr的字符串fr个数即列行数数值用于计算各列行在网格宽度高度上的占比。根据两者的设置组合Grid 呈现三种布局模式直接影响 GridItem 的排布与 Grid 的滚动能力行列模板同时设置Grid 只展示固定行列数的元素其余元素不展示Grid 不可滚动GridItem 默认填满网格大小仅设置其一元素沿设置的方向排布超出显示区域的元素可通过滚动展示——设置columnsTemplate时滚动方向为垂直设置rowsTemplate时滚动方向为水平两者均不设置行列数由 Grid 高度、首个元素高度、rowsGap等共同决定超出行列容纳范围的元素不展示且不可滚动。当需要构建可滚动的网格如文件管理、购物、视频列表页时建议只设置行列模板之一详见 创建网格Grid/GridItem 中的“构建可滚动的网格布局”一节该指南中的示例还展示了通过 Scroller 绑定 Grid 并调用scrollPage实现日历翻页等滚动位置控制。大数据量网格的性能优化LazyForEach 与 cachedCount对于内容结构相似的多个 GridItem官方建议使用 ForEach 循环渲染以减少重复代码但当构建具有大量网格项的可滚动网格时应改用 数据懒加载 LazyForEach 实现按需迭代加载。二者的取舍在 GridItem 的创建时机上体现得尤为明显ForEach 在首次渲染时为数据源每个数组项生成唯一键值并创建对应组件数据量大时一次性创建开销较高LazyForEach 仅在滚动容器的可视区域内按需创建 GridItem组件滑出可视区外即被销毁回收从而降低内存占用。配合 LazyForEachGrid 提供cachedCount属性设置预加载的 GridItem 数量初始值 1仅对 LazyForEach 生效设置后会在 Grid 显示区域上下各缓存cachedCount × 列数个 GridItem减少滑动白块超出显示与缓存范围的 GridItem 会被释放。典型用法Grid() { LazyForEach(this.dataSource, itemGeneratorFunc: {dataSource: T, _: Int64 GridItem() { // 单元格内容 } }) } .cachedCount(3)说明cachedCount的增加会增大 UI 的 CPU、内存开销使用时需结合实际数据量、滚动体验与设备性能综合权衡。同时注意 LazyForEach 的使用限制只有 List、Grid、Swiper 支持数据懒加载LazyForEach 的键值生成器必须为每个数据生成唯一值每次迭代必须且只允许创建一个子组件且该子组件必须是父容器Grid允许的子组件——在网格场景下即 GridItem。总结GridItem 是仓颉 ArkUI 网格布局中不可替代的“单项容器”结构约束仅能作为 Grid 的子组件且仅承载单个子组件创建方式init()与init(child)两种构造后者用于声明单元格内容定位能力通过rowStart/rowEnd/columnStart/columnEnd成对设置实现单网格项跨多行多列取值受 Grid 总行列数约束[0, 总行列数-1]初始值 0需统一管理单项位置时推荐改用 Grid 的 layoutOptions 参数配合使用静态小数据量用 ForEach 循环渲染动态大数据量用 LazyForEach cachedCount实现按需加载与预缓存。掌握 GridItem 的位置属性与 Grid 行列模板的协同关系即可在仓颉 ArkUI 中高效构建从九宫格、日历到可滚动网格列表等各类二维布局页面。相关文档Grid 网格容器行列模板、间距、cachedCount 与 GridLayoutOptions创建网格Grid/GridItem网格布局开发指南与完整示例ForEach 循环渲染数组数据循环生成 GridItemLazyForEach 数据懒加载大数据量网格按需渲染与回收赞分享文档知识库教程OpenHarmony【免费下载链接】CangjieCorpus本仓库为仓颉编程语言语料库聚焦 仓颉编程语言 核心知识体系整合官方开发指南、API 文档、典型代码示例及语法规范等多维度资源经结构化处理与专业标注构建为支持 RAG检索增强生成技术 的高质量知识基座适配智能编码助手、学习辅助工具等应用开发需求。 欢迎开发者基于本语料库构建仓颉语言智能应用推动鸿蒙开发生态智能化升级项目地址https://gitcode.com/Cangjie/CangjieCorpus点击查看免费下载相关推荐仓颉 ArkUI MenuItemGroup 组件详解菜单 MenuItem 分组的创建、参数配置与实战示例仓颉 ArkUI MenuItemGroup 组件详解菜单 MenuItem 分组的创建、参数配置与实战示例 本篇文章聚焦仓颉Cangjie语言 ArkU文档知识库教程OpenHarmonyArkUI 网格布局实战在仓颉应用中用 Grid/GridItem 构建自适应网格ArkUI 网格布局实战在仓颉应用中用 Grid/GridItem 构建自适应网格 网格布局Grid/GridItem是 ArkUI 声明式 UI 中最常文档知识库教程OpenHarmony仓颉 ArkUI-CJ 图形绘制指南Circle 圆形组件详解与实战示例仓颉 ArkUI CJ 图形绘制指南Circle 圆形组件详解与实战示例 本文面向使用仓颉Cangjie语言进行 OpenHarmony 应用 UI 开发文档知识库教程OpenHarmony上一篇如何用开源工具实现40平台7×24小时直播自动录制DouyinLiveRecorder深度解析下一篇如何用AlienFX Tools掌控你的Alienware灯光、风扇、性能一体化控制终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

AI医疗资源调度系统:从人工协调到算法决策的落地实践

AI医疗资源调度系统:从人工协调到算法决策的落地实践

我们先从一家三甲医院调度台的日常说起。早上八点,住院总值班的电话响个不停:急诊有两例胸痛需要立刻收治,但心内监护室只剩一张空床;ICU有一台ECMO设备正在消毒,是留给下午的择期手术,还是先挪给急诊抢救&…

2026/10/16 6:50:57 阅读更多 →
Windows高DPI缩放导致软件模糊的完整排查与修复指南

Windows高DPI缩放导致软件模糊的完整排查与修复指南

1. 模糊问题的根源:高DPI缩放下,程序到底发生了什么你现在很可能正遇到这样一个场景:刚换上 2K 或 4K 显示器,系统为了让界面看得清,把缩放比例调到了 125% 或 150%。Windows 自带的设置界面很锐利,可双击某…

2026/10/16 6:49:57 阅读更多 →
Linux pthread线程控制实战:生命周期、同步与死锁排查

Linux pthread线程控制实战:生命周期、同步与死锁排查

编写 Thread 的目的,绝不只是"让函数并行跑起来"。实际开发中,真正让人头疼的往往是:线程怎么退出才安全?主线程怎么知道子线程干完了?栈空间设多大不死锁?多线程访问同一份数据时怎么保证不出错…

2026/10/16 6:49:57 阅读更多 →

最新新闻

安卓模拟器抓包环境搭建:HTTPS证书与代理配置全攻略

安卓模拟器抓包环境搭建:HTTPS证书与代理配置全攻略

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

2026/10/16 7:35:10 阅读更多 →
本地开源AI 3D模型闭合网格修复与游戏资产转换工作流

本地开源AI 3D模型闭合网格修复与游戏资产转换工作流

1. 项目概述:为什么“能用了”这三个字值得单独强调?“3D AI模型终于能用了!”——这句话不是营销话术,而是过去半年里我反复在本地工作站上敲下回车键后,真实发出的感叹。它背后藏着一个被严重低估的现实:…

2026/10/16 7:35:10 阅读更多 →
Android手机SLAM数据集采集:Camera2与IMU时间戳对齐实战

Android手机SLAM数据集采集:Camera2与IMU时间戳对齐实战

简介:VideoIMUCapture-Android 是一款面向 SLAM 与 Structure from Motion(SfM)研究者的 Android 数据采集工具,用于同步录制相机帧与 IMU 数据,为三维重建提供原始素材。应用以约 30Hz 采集视频帧、约 100Hz 采集惯性…

2026/10/16 7:35:10 阅读更多 →
QQ开放OpenClaw机器人创建通道:个人也能轻松拥有5个专属AI助手

QQ开放OpenClaw机器人创建通道:个人也能轻松拥有5个专属AI助手

最近看到“腾讯QQ开放OpenClaw机器人创建通道”这个消息,第一反应是:聊天机器人这事总算从“开发者专属”往“普通用户也能上手”迈了一大步。以前想在QQ里挂一个自动化机器人,要么自己写服务端代码折腾接口,要么只能在各种群里手…

2026/10/16 7:35:10 阅读更多 →
Linux loadavg全解:内核计算原理、高负载排查与容器陷阱

Linux loadavg全解:内核计算原理、高负载排查与容器陷阱

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

2026/10/16 7:35:10 阅读更多 →
airllm分层加载实战:8GB显存跑70B大模型推理

airllm分层加载实战:8GB显存跑70B大模型推理

1. 当大模型装不进显卡时,我在想什么第一次看到 airllm 这个项目名的时候,我正对着自己那台只有 8GB 显存的旧笔记本发愁。想跑一个 70B 参数级别的大语言模型,按常规思路算一下显存占用:光是模型权重以 FP16 精度加载&#xff0c…

2026/10/16 7:34:10 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

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

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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/15 9:49:14 阅读更多 →