• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# GridRow
2<!--Kit: ArkUI-->
3<!--Subsystem: ArkUI-->
4<!--Owner: @zju_ljz-->
5<!--Designer: @lanshouren-->
6<!--Tester: @liuli0427-->
7<!--Adviser: @HelloCrease-->
8
9栅格布局可以为布局提供规律性的结构,解决多尺寸多设备的动态布局问题,保证不同设备上各个模块的布局一致性。
10
11栅格容器组件,仅可以和栅格子组件([GridCol](ts-container-gridcol.md))在栅格布局场景中使用。
12
13>  **说明:**
14>
15> 该组件从API version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
16
17
18## 子组件
19
20可以包含GridCol子组件。
21
22
23## 接口
24GridRow(option?: GridRowOptions)
25
26栅格行布局容器。
27
28**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
29
30**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
31
32**系统能力:** SystemCapability.ArkUI.ArkUI.Full
33
34**参数:**
35| 参数名 |类型|必填|说明|
36|-----|-----|----|----|
37| option | [GridRowOptions](#gridrowoptions对象说明) | 否  | 栅格布局子组件参数。 |
38
39## GridRowOptions对象说明
40
41设置栅格行布局容器的布局选项。
42
43**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
44
45**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
46
47**系统能力:** SystemCapability.ArkUI.ArkUI.Full
48
49| 名称 | 类型 | 只读 | 可选 | 说明 |
50| -------- | -------- | -------- | -------- | -------- |
51|columns| number \| [GridRowColumnOption](#gridrowcolumnoption) |  否 | 是  |设置布局列数。<br />取值为大于0的整数。<br/>- API version 20之前:默认值为12。<br/>- API version 20及之后:默认值为{ xs: 2, sm: 4, md: 8, lg: 12, xl: 12, xxl: 12 } <br />非法值:按默认值处理。|
52|gutter|[Length](ts-types.md#length) \| [GutterOption](#gutteroption)|  否 | 是  |栅格布局间距。<br />默认值:0 <br />非法值:按默认值处理。<br />单位:vp |
53|breakpoints|[BreakPoints](#breakpoints)|  否 | 是  |设置断点值的断点数列以及基于窗口或容器尺寸的相应参照。<br />默认值:<br />{<br />value: ["320vp", "600vp", "840vp"],<br />reference: BreakpointsReference.WindowSize<br />} <br />非法值:按默认值处理。<br />单位:vp |
54|direction|[GridRowDirection](#gridrowdirection枚举说明)|  否 | 是  |栅格布局排列方向。<br />默认值:GridRowDirection.Row <br />非法值:按默认值处理。 |
55
56## GutterOption
57
58栅格布局间距类型,用于描述栅格子组件不同方向的间距。
59
60**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
61
62**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
63
64**系统能力:** SystemCapability.ArkUI.ArkUI.Full
65
66| 名称 | 类型 | 只读 | 可选 | 说明 |
67| -------- | -------- | -------- | -------- | -------- |
68| x  | [Length](ts-types.md#length) \| [GridRowSizeOption](#gridrowsizeoption) | 否  | 是  | 栅格子组件水平方向间距。    |
69| y  | [Length](ts-types.md#length) \| [GridRowSizeOption](#gridrowsizeoption) | 否  | 是   | 栅格子组件竖直方向间距。    |
70
71## GridRowColumnOption
72
73栅格在不同宽度设备类型下,栅格列数。
74
75**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
76
77**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
78
79**系统能力:** SystemCapability.ArkUI.ArkUI.Full
80
81| 名称 | 类型 | 只读 | 可选 | 说明 |
82| -------- | -------- | -------- | -------- | -------- |
83| xs  | number | 否   | 是   | 在栅格大小为xs的设备上,栅格容器组件的栅格列数。    |
84| sm  | number | 否    | 是  | 在栅格大小为sm的设备上,栅格容器组件的栅格列数。      |
85| md  | number | 否    | 是  | 在栅格大小为md的设备上,栅格容器组件的栅格列数。    |
86| lg  | number | 否   | 是   | 在栅格大小为lg的设备上,栅格容器组件的栅格列数。      |
87| xl  | number | 否    | 是  | 在栅格大小为xl的设备上,栅格容器组件的栅格列数。    |
88| xxl | number | 否    | 是  | 在栅格大小为xxl的设备上,栅格容器组件的栅格列数。    |
89
90**说明:**
91- API version 20之前,仅配置部分断点下GridRow组件的栅格列数,取已配置的更小断点的栅格列数补全未配置的栅格列数。若未配置更小断点的栅格列数,以默认栅格列数12补全未配置的栅格列数。
92  <!--code_no_check-->
93  ```ts
94  columns: {xs:2, md:4, lg:8} // 等于配置 columns: {xs:2, sm:2, md:4, lg:8, xl:8, xxl:8}
95  columns: {md:4, lg:8} // 等于配置 columns: {xs:12, sm:12, md:4, lg:8, xl:8, xxl:8}
96  ```
97- API version 20及以后,仅配置部分断点下GridRow组件的栅格列数,取已配置的更小断点的栅格列数补全未配置的栅格列数。若未配置更小断点的栅格列数,取已配置的更大断点的栅格列数补全未配置的栅格列数。
98  <!--code_no_check-->
99  ```ts
100  columns: {xs:2, md:4, lg:8} // 等于配置 columns: {xs:2, sm:2, md:4, lg:8, xl:8, xxl:8}
101  columns: {md:4, lg:8} // 等于配置 columns: {xs:4, sm:4, md:4, lg:8, xl:8, xxl:8}
102  ```
103- 建议手动配置不同断点下GridRow组件的栅格列数,避免默认补全的栅格列数的布局效果不符合预期。
104- 每列栅格的宽度为GridRow的内容区大小减去栅格子组件的间距gutter, 再除以总的栅格列数。比如,宽800px的GridRow设置columns为12,gutter设置为10px, padding设置为20px,那么每列栅格的宽度为(800 - 20 * 2 - 10 * 11) / 12。
105
106## GridRowSizeOption
107
108栅格在不同宽度设备类型下,gutter的大小。
109
110**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
111
112**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
113
114**系统能力:** SystemCapability.ArkUI.ArkUI.Full
115
116| 名称 | 类型 | 只读 | 可选 | 说明 |
117| -------- | -------- | -------- | -------- | -------- |
118| xs  | [Length](ts-types.md#length) | 否  | 是   | 在最小宽度类型设备上,栅格子组件的间距。    |
119| sm  | [Length](ts-types.md#length) | 否  | 是   | 在小宽度类型设备上,栅格子组件的间距。      |
120| md  | [Length](ts-types.md#length) | 否  | 是   | 在中等宽度类型设备上,栅格子组件的间距。    |
121| lg  | [Length](ts-types.md#length) | 否  | 是   | 在大宽度类型设备上,栅格子组件的间距。      |
122| xl  | [Length](ts-types.md#length) | 否  | 是   | 在特大宽度类型设备上,栅格子组件的间距。    |
123| xxl | [Length](ts-types.md#length) | 否  | 是   | 在超大宽度类型设备上,栅格子组件的间距。    |
124
125## BreakPoints
126
127设置栅格容器组件的断点。更多断点的说明参考[栅格容器断点](../../../ui/arkts-layout-development-grid-layout.md#栅格容器断点)。
128
129**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
130
131**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
132
133**系统能力:** SystemCapability.ArkUI.ArkUI.Full
134
135| 名称 | 类型 | 只读 | 可选 | 说明 |
136| -------- | -------- | -------- | -------- | -------- |
137| value  | Array&lt;string&gt; | 否 | 是  | 设置断点位置的单调递增数组。<br>默认值:["320vp", "600vp", "840vp"] <br />非法值:按默认值处理。<br />单位:vp    |
138| reference  | [BreakpointsReference](#breakpointsreference枚举说明) | 否 | 是   | 断点切换参照物。<br>默认值:BreakpointsReference.WindowSize <br />非法值:按默认值处理。 |
139<!--code_no_check-->
140```ts
141  // 启用xs、sm、md共3个断点
142  breakpoints: {value: ["100vp", "200vp"]}
143  // 启用xs、sm、md、lg共4个断点,断点范围值必须单调递增
144  breakpoints: {value: ["320vp", "600vp", "840vp"]}
145  // 启用xs、sm、md、lg、xl共5个断点,断点范围数量不可超过断点可取值数量-1
146  breakpoints: {value: ["320vp", "600vp", "840vp", "1080vp"]}
147```
148
149## BreakpointsReference枚举说明
150
151设置栅格容器组件的断点参照物。
152
153**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
154
155**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
156
157**系统能力:** SystemCapability.ArkUI.ArkUI.Full
158
159| 名称 | 说明 |
160| -------- | -------- |
161| WindowSize | 以窗口为参照。 |
162| ComponentSize | 以容器为参照。 |
163
164## GridRowDirection枚举说明
165
166栅格元素排列方向。
167
168**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
169
170**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
171
172**系统能力:** SystemCapability.ArkUI.ArkUI.Full
173
174| 名称 | 说明 |
175| -------- | -------- |
176| Row | 栅格元素按照行方向排列。 |
177| RowReverse | 栅格元素按照逆序行方向排列。 |
178
179**说明:**
180* 栅格元素仅支持Row/RowReverse排列,不支持column/ColumnReverse方向排列。
181* 栅格子组件仅能通过span、offset计算子组件位置与大小。多个子组件span超过规定列数时自动换行。
182* 单个元素span大小超过最大列数时后台默认span为最大column数。
183* 新一行的Offset加上子组件的span超过总列数时,将下一个子组件在新的一行放置。
184* 例:Item1: GridCol({ span: 6 }), Item2: GridCol({ span: 8, offset:11 })
185
186|1      | 2     | 3     | 4     | 5     | 6     | 7     | 8     | 9     | 10    | 11    | 12    |
187| ----- | ------ | ---- | ---- | -----|-----|---------|--------|------|------- |------- |------- |
188| $\circ$ | $\circ$ | $\circ$ | $\circ$ | $\circ$|$\circ$| - |  - |  - |  -  | -  | -  |
189| -     | -     | -     | -     | -     |       |       |       |       |       |   |   |
190| $\circ$ | $\circ$ | $\circ$ | $\circ$ | $\circ$|$\circ$|$\circ$|$\circ$|  |   |   |   |
191
192## 属性
193
194除支持[通用属性](ts-component-general-attributes.md)外,还支持以下属性:
195
196### alignItems<sup>10+</sup>
197
198alignItems(value: ItemAlign)
199
200设置GridRow中的GridCol垂直主轴方向对齐方式。GridCol本身也可通过alignSelf([ItemAlign](ts-appendix-enums.md#itemalign))设置自身对齐方式。当上述两种对齐方式都设置时,以GridCol自身设置为准。
201
202**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
203
204**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
205
206**系统能力:** SystemCapability.ArkUI.ArkUI.Full
207
208**参数:**
209
210| 参数名 | 类型                                        | 必填 | 说明                                                         |
211| ------ | ------------------------------------------- | ---- | ------------------------------------------------------------ |
212| value  | [ItemAlign](ts-appendix-enums.md#itemalign) | 是   | GridRow中的GridCol垂直主轴方向对齐方式。<br/>默认值:ItemAlign.Start <br />非法值:按默认值处理。<br/>**说明**:<br/>ItemAlign支持的枚举:ItemAlign.StartItemAlign.CenterItemAlign.EndItemAlign.Stretch。 |
213
214
215## 事件
216
217除支持[通用事件](ts-component-general-events.md)外,还支持以下事件:
218
219### onBreakpointChange
220
221onBreakpointChange(callback: (breakpoints: string) => void)
222
223断点发生变化时触发回调。
224
225**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
226
227**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
228
229**系统能力:** SystemCapability.ArkUI.ArkUI.Full
230
231**参数:**
232
233| 参数名   | 类型   | 必填   | 说明   |
234| ----- | ------ | ---- | ---------------------------------------- |
235|callback| (breakpoints: string) => void |是|breakpoints取值为`"xs"`、`"sm"`、`"md"`、`"lg"`、`"xl"`、`"xxl"`。|
236
237## 示例
238
239栅格布局的基本用法。
240
241```ts
242// xxx.ets
243@Entry
244@Component
245struct GridRowExample {
246  @State bgColors: Color[] = [Color.Red, Color.Orange, Color.Yellow, Color.Green, Color.Pink, Color.Grey, Color.Blue, Color.Brown]
247  @State currentBp: string = 'unknown'
248
249  build() {
250    Column() {
251      GridRow({
252        columns: 5,
253        gutter: { x: 5, y: 10 },
254        breakpoints: { value: ["400vp", "600vp", "800vp"],
255          reference: BreakpointsReference.WindowSize },
256        direction: GridRowDirection.Row
257      }) {
258        ForEach(this.bgColors, (color: Color) => {
259          GridCol({ span: { xs: 1, sm: 2, md: 3, lg: 4 }, offset: 0, order: 0 }) {
260            Row().width("100%").height("20vp")
261          }.borderColor(color).borderWidth(2)
262        })
263      }.width("100%").height("100%")
264      .onBreakpointChange((breakpoint) => {
265        this.currentBp = breakpoint
266      })
267    }.width('80%').margin({ left: 10, top: 5, bottom: 5 }).height(200)
268    .border({ color: '#880606', width: 2 })
269  }
270}
271```
272
273![figures/gridrow.png](figures/gridrow.png)
274