当前位置: 首页 > news >正文

鸿蒙应用开发从入门到实战(二十四):一文搞懂ArkUI网格布局

大家好,我是潘Sir,持续分享IT技术,帮你少走弯路。《鸿蒙应用开发从入门到项目实战》系列文章持续更新中,陆续更新AI+编程、企业级项目实战等原创内容、欢迎关注!

ArkUI提供了各种布局组件用于界面布局,本文研究使用Grid组件实现网格布局。

一、概述

网格布局(Grid)是一种强大的布局方案,它将页面划分为组成的网格,然后将页面内容在二维网格中进行自由的定位,以下效果都可通过网格布局实现

1网格布局案例

网格布局的容器组件为 Grid,子组件为 GridItem,具体语法如下

代码

Grid() {GridItem() {Text('GridItem')   }GridItem() {Text('GridItem')   }GridItem() {Text('GridItem')   }GridItem() {Text('GridItem')   }......
}

效果
2网格布局

二、常用属性

2.1 划分网格

Grid组件支持自定义行数和列数以及每行和每列的尺寸大小,上述内容需要使用rowsTemplate()方法和columnsTemplate()方法进行设置,具体用法如下

代码

Grid() {ForEach([1, 2, 3, 4, 5, 6, 7, 8, 9], (item) => {GridItem() {Text(item.toString()).itemTextStyle()}})
}
.width(320)
.height(240)
.rowsTemplate('1fr 1fr 1fr')
.columnsTemplate('1fr 2fr 1fr')
.gridStyle()

效果

3grid划分网格

说明:

fr为 fraction(比例、分数) 的缩写。fr的个数表示网格布局的行数或列数,fr前面的数值大小,表示该行或列的尺寸占比。

示例代码

pages/layout目录下新建grid目录,新建GridBasic.ets文件

@Entry
@Component
struct GridBasic {build() {Column() {Grid() {ForEach([1, 2, 3, 4, 5, 6, 7, 8, 9], (item) => {GridItem() {Text(item.toString()).itemTextStyle12()}})}.width(320).height(240).rowsTemplate('1fr 1fr 1fr').columnsTemplate('1fr 2fr 1fr').gridStyle12()}.width('100%').height('100%').justifyContent(FlexAlign.Center)}
}@Extend(Text) function itemTextStyle12() {.height('100%').width('100%').textAlign(TextAlign.Center).fontColor(Color.White).fontSize(40).fontWeight(FontWeight.Bold).backgroundColor('#008a00').borderWidth(1)
}@Extend(Grid) function gridStyle12() {.backgroundColor('#f5f5f5').borderWidth(1)
}

2.2 子组件所占行列数

GridItem组件支持横跨几行或者几列,如下图所示

4子组件所占行列数

可以使用columnStart()columnEnd()rowStart()rowEnd()方法设置 GridItem 组件所占的单元格,其中rowStartrowEnd属性表示当前子组件的起始行号和终点行号,columnStartcolumnEnd属性表示指定当前子组件的起始列号和终点列号。

说明:

Grid容器中的行号和列号均从0开始。

具体用法如下

代码:

Grid() {GridItem() {Text('1').itemTextStyle()}.rowStart(0).rowEnd(1).columnStart(0).columnEnd(1)GridItem() {Text('2').itemTextStyle()}GridItem() {Text('3').itemTextStyle()}GridItem() {Text('4').itemTextStyle()}GridItem() {Text('5').itemTextStyle()}.columnStart(1).columnEnd(2)
}
.width(320)
.height(240)
.rowsTemplate('1fr 1fr 1fr')
.columnsTemplate('1fr 2fr 1fr')
.gridStyle()

效果:
5grid案例

示例代码

pages/layout/grid目录,新建StartAndEndPage.ets文件

@Entry
@Component
struct StartAndEndPage {build() {Column() {Grid() {GridItem() {Text('1').itemTextStyle13()}.rowStart(0).rowEnd(1).columnStart(0).columnEnd(1)GridItem() {Text('2').itemTextStyle13()}GridItem() {Text('3').itemTextStyle13()}GridItem() {Text('4').itemTextStyle13()}GridItem() {Text('5').itemTextStyle13()}.columnStart(1).columnEnd(2)}.width(320).height(240).rowsTemplate('1fr 1fr 1fr').columnsTemplate('1fr 2fr 1fr').gridStyle13()}.width('100%').height('100%').justifyContent(FlexAlign.Center)}
}@Extend(Text) function itemTextStyle13() {.height('100%').width('100%').textAlign(TextAlign.Center).fontColor(Color.White).fontSize(40).fontWeight(FontWeight.Bold).backgroundColor('#008a00').borderWidth(1)
}@Extend(Grid) function gridStyle13() {.backgroundColor('#f5f5f5').borderWidth(1)
}

2.3 行列间距

使用rowsGap()columnsGap()属性,可以控制行列间距,具体用法如下

代码

Grid() {......
}
.columnsGap(20)
.rowsGap(20)

效果

6行列间距

示例代码

pages/layout/grid目录,新建GridGap.ets文件

@Entry
@Component
struct GridGap {build() {Column() {Grid() {GridItem() {Text('1').itemTextStyle14()}.rowStart(0).rowEnd(1).columnStart(0).columnEnd(1)GridItem() {Text('2').itemTextStyle14()}.rowStart(0).rowEnd(1)GridItem() {Text('3').itemTextStyle14()}GridItem() {Text('4').itemTextStyle14()}.columnStart(1).columnEnd(2)}.width(320).height(240).rowsTemplate('1fr 1fr 1fr').columnsTemplate('1fr 2fr 1fr').gridStyle14().rowsGap(20).columnsGap(20)}.width('100%').height('100%').justifyContent(FlexAlign.Center)}
}@Extend(Text) function itemTextStyle14() {.height('100%').width('100%').textAlign(TextAlign.Center).fontColor(Color.White).fontSize(40).fontWeight(FontWeight.Bold).backgroundColor('#008a00').borderWidth(1)
}@Extend(Grid) function gridStyle14() {.backgroundColor('#f5f5f5').borderWidth(1)
}

三、计算器案例

使用网格布局实现如下布局效果

7计算器案例

示例代码

pages/layout/grid目录,新建CalculatorPage.ets文件

@Entry
@Component
struct CalculatorPage {build() {Column() {Grid() {GridItem() {Text('0').screenTextStyle()}.columnStart(0).columnEnd(3)GridItem() {Text('CE').buttonTextStyle()}GridItem() {Text('C').buttonTextStyle()}GridItem() {Text('÷').buttonTextStyle()}GridItem() {Text('x').buttonTextStyle()}GridItem() {Text('7').buttonTextStyle()}GridItem() {Text('8').buttonTextStyle()}GridItem() {Text('9').buttonTextStyle()}GridItem() {Text('-').buttonTextStyle()}GridItem() {Text('4').buttonTextStyle()}GridItem() {Text('5').buttonTextStyle()}GridItem() {Text('6').buttonTextStyle()}GridItem() {Text('+').buttonTextStyle()}GridItem() {Text('1').buttonTextStyle()}GridItem() {Text('2').buttonTextStyle()}GridItem() {Text('3').buttonTextStyle()}GridItem() {Text('=').buttonTextStyle().backgroundColor('#1aa1e2')}.rowStart(4).rowEnd(5)GridItem() {Text('0').buttonTextStyle()}.columnStart(0).columnEnd(1)GridItem() {Text('.').buttonTextStyle()}}.gridStyle15().rowsTemplate('1fr 1fr 1fr 1fr 1fr 1fr').columnsTemplate('1fr 1fr 1fr 1fr')}.width('100%').height('100%').justifyContent(FlexAlign.Center)}
}@Extend(Text) function screenTextStyle() {.backgroundColor('#bac8d3').height('100%').width('100%').textAlign(TextAlign.End).padding(10).borderRadius(10).borderWidth(1).fontSize(40).fontWeight(FontWeight.Bold)
}@Extend(Text) function buttonTextStyle() {.backgroundColor('#f5f5f5').height('100%').width('100%').textAlign(TextAlign.Center).padding(10).borderRadius(10).borderWidth(1).fontSize(25)
}@Extend(Grid) function gridStyle15() {.width(320).height(480).borderRadius(10).borderWidth(1).padding(10).rowsGap(10).columnsGap(10)
}

《鸿蒙应用开发从入门到项目实战》系列文章持续更新中,陆续更新AI+编程、企业级项目实战等原创内容,防止迷路,欢迎关注!

http://www.hskmm.com/?act=detail&tid=32764

相关文章:

  • Go-Sciter入门系列-环境搭建
  • ChromeOS融合Android技术栈,打造更智能的Chromebook体验
  • Docker 部署 PHP 全手册
  • 2025 年最新推荐包装印刷制造厂家排行榜:聚焦设备、团队与服务的优质品牌精选定制/设计/优质/品质包装印刷厂家推荐
  • 2025 年国内发电机厂家最新推荐排行榜:涵盖多功率型号,助力精准选购优质发电机品牌指南
  • 作业二
  • VSCode 使用默认profile打开文件
  • 2025 年最新推荐国际物流服务公司权威排行榜:聚焦海运快递跨境专线,助力商家选优质物流伙伴
  • 2025年国内高温隧道炉知名品牌推荐,固化炉,回流焊炉,连续式烘干线厂家供货商!
  • 【数据结构】不带表头节点的双向链表的基本操作 - 实践
  • VSCode Java 单元测试没有运行按钮
  • 2025 北京宽带安装公司最新推荐榜:专业口碑双优服务商汇总,企业家庭装机必看指南
  • 分块
  • Qt实现UVC摄像头捕获
  • 2025年10月17日信息公布:太阳能路灯厂家最新推荐榜~覆盖乡村户外、单臂双臂、农村及5-8米LED款,精选优质路灯企业
  • 基于Java+Springboot+Vue开发的新闻管理系统源码+运行步骤
  • Linux 环境变量与软件安装
  • 2025最新超详细 VMware 17虚拟机下载安装教程(附安装包下载)保姆级详细步骤
  • 网络分析与数据可视化工具Gephi 0.9.2 下载安装教程全流程(Gephi图文安装教程)
  • 2025 涂料供应厂家最新推荐榜:权威品牌测评 + 选购指南,家装工程选品必看
  • 2025 年中走丝线切割源头厂家最新推荐排行榜发布,解读优质厂家技术亮点与选择攻略伺服/高效/自动中走丝线切割厂家推荐
  • 2024浙江省省赛决赛wp
  • 【解决办法】pytorch OSError: [WinError 1114] 动态链接库(DLL)初始化例程失败”
  • 23省赛初赛
  • 2025年苏州保洁服务公司最新权威推荐榜:专业家政与深度清洁口碑优选,覆盖日常保洁、开荒保洁、深度清洁及企业保洁服务
  • 2025 年快速退火炉优质厂家最新推荐榜单:真空 / 半导体 / 晶圆 / 高温 / 桌面 / 半自动 / 全自动 / 芯片 / 硅片 / RTP 设备企业权威评选
  • 2025 年油罐厂家最新推荐榜:sf 双层 / 加油站 / 化工 / 不锈钢 / 地埋 / 卧式 / 立式油罐优质厂商权威盘点,帮您避开选择误区精准选品
  • 2025 年立体画厂家最新推荐榜单:涵盖 3D 光栅立体画、立体光栅卡、3D 装饰立体画、三维立体画,助企业与消费者精准挑选优质品牌
  • 2025 最新高低温试验箱厂家推荐榜:优质厂家推荐,含恒温恒湿设备供应商核心实力解析
  • Luogu P10027 梦境世界 题解 [ 蓝 ] [ 多维 DP ]