1e41f4b71Sopenharmony_ci# Grid
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ci网格容器,由“行”和“列”分割的单元格所组成,通过指定“项目”所在的单元格做出各种各样的布局。
4e41f4b71Sopenharmony_ci
5e41f4b71Sopenharmony_ci>  **说明:**
6e41f4b71Sopenharmony_ci>
7e41f4b71Sopenharmony_ci>  该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8e41f4b71Sopenharmony_ci
9e41f4b71Sopenharmony_ci
10e41f4b71Sopenharmony_ci## 子组件
11e41f4b71Sopenharmony_ci
12e41f4b71Sopenharmony_ci仅支持[GridItem](ts-container-griditem.md)子组件,支持渲染控制类型([if/else](../../../quick-start/arkts-rendering-control-ifelse.md)、[ForEach](../../../quick-start/arkts-rendering-control-foreach.md)、[LazyForEach](../../../quick-start/arkts-rendering-control-lazyforeach.md)和[Repeat](../../../quick-start/arkts-new-rendering-control-repeat.md))。
13e41f4b71Sopenharmony_ci
14e41f4b71Sopenharmony_ci>  **说明:**
15e41f4b71Sopenharmony_ci>
16e41f4b71Sopenharmony_ci>  Grid子组件的索引值计算规则:
17e41f4b71Sopenharmony_ci>
18e41f4b71Sopenharmony_ci>  按子组件的顺序依次递增。
19e41f4b71Sopenharmony_ci>
20e41f4b71Sopenharmony_ci>  if/else语句中,只有条件成立分支内的子组件会参与索引值计算,条件不成立分支内的子组件不计算索引值。
21e41f4b71Sopenharmony_ci>
22e41f4b71Sopenharmony_ci>  ForEach/LazyForEach和Repeat语句中,会计算展开所有子节点索引值。
23e41f4b71Sopenharmony_ci>
24e41f4b71Sopenharmony_ci>  [if/else](../../../quick-start/arkts-rendering-control-ifelse.md)、[ForEach](../../../quick-start/arkts-rendering-control-foreach.md)、[LazyForEach](../../../quick-start/arkts-rendering-control-lazyforeach.md)和[Repeat](../../../quick-start/arkts-new-rendering-control-repeat.md)发生变化以后,会更新子节点索引值。
25e41f4b71Sopenharmony_ci>
26e41f4b71Sopenharmony_ci>  Grid子组件的visibility属性设置为Hidden或None时依然会计算索引值。
27e41f4b71Sopenharmony_ci>
28e41f4b71Sopenharmony_ci>  Grid子组件的visibility属性设置为None时不显示,但依然会占用子组件对应的网格。
29e41f4b71Sopenharmony_ci>
30e41f4b71Sopenharmony_ci>  Grid子组件设置position属性,会占用子组件对应的网格,子组件将显示在相对Grid左上角偏移position的位置。该子组件不会随其对应网格滚动,在对应网格滑出Grid显示范围外后不显示。
31e41f4b71Sopenharmony_ci>
32e41f4b71Sopenharmony_ci>  当Grid子组件之间留有空隙时,会根据当前的展示区域尽可能填补空隙,因此GridItem可能会随着网格滚动而改变相对位置。
33e41f4b71Sopenharmony_ci
34e41f4b71Sopenharmony_ci## 接口
35e41f4b71Sopenharmony_ci
36e41f4b71Sopenharmony_ciGrid(scroller?: Scroller, layoutOptions?: GridLayoutOptions)
37e41f4b71Sopenharmony_ci
38e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
39e41f4b71Sopenharmony_ci
40e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
41e41f4b71Sopenharmony_ci
42e41f4b71Sopenharmony_ci**参数:**
43e41f4b71Sopenharmony_ci
44e41f4b71Sopenharmony_ci| 参数名   | 类型                                    | 必填 | 说明                                                     |
45e41f4b71Sopenharmony_ci| -------- | ------------------------------------------- | ---- | ------------------------------------------------------------ |
46e41f4b71Sopenharmony_ci| scroller | [Scroller](ts-container-scroll.md#scroller) | 否   | 可滚动组件的控制器。用于与可滚动组件进行绑定。<br/>**说明:** <br/>不允许和其他滚动类组件,如:[List](ts-container-list.md)、[Grid](ts-container-grid.md)、[Scroll](ts-container-scroll.md)等绑定同一个滚动控制对象。 |
47e41f4b71Sopenharmony_ci| layoutOptions<sup>10+</sup> | [GridLayoutOptions](#gridlayoutoptions10对象说明) | 否 | Grid布局选项。 |
48e41f4b71Sopenharmony_ci
49e41f4b71Sopenharmony_ci## GridLayoutOptions<sup>10+</sup>对象说明
50e41f4b71Sopenharmony_ci
51e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
52e41f4b71Sopenharmony_ci
53e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
54e41f4b71Sopenharmony_ci
55e41f4b71Sopenharmony_ci布局选项。其中,irregularIndexes和onGetIrregularSizeByIndex可对仅设置rowsTemplate或columnsTemplate的Grid使用,可以指定一个index数组,并为其中的index对应的GridItem设置其占据的行数与列数,使用方法参见示例3;onGetRectByIndex可对同时设置rowsTemplate和columnsTemplate的Grid使用,为指定的index对应的GridItem设置位置和大小,使用方法参见示例1。
56e41f4b71Sopenharmony_ci
57e41f4b71Sopenharmony_ci| 名称    | 类型      | 必填   | 说明                    |
58e41f4b71Sopenharmony_ci| ----- | ------- | ---- | --------------------- |
59e41f4b71Sopenharmony_ci| regularSize  | [number, number]  | 是    | 大小规则的GridItem在Grid中占的行数和列数,只支持占1行1列即[1, 1]。 <br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。  |
60e41f4b71Sopenharmony_ci| irregularIndexes | number[] | 否    | 指定的GridItem索引在Grid中的大小是不规则的。当不设置onGetIrregularSizeByIndex时,irregularIndexes中GridItem的默认大小为垂直滚动Grid的一整行或水平滚动Grid的一整列。 <br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
61e41f4b71Sopenharmony_ci| onGetIrregularSizeByIndex | (index: number) => [number, number] | 否    | 配合irregularIndexes使用,设置不规则GridItem占用的行数和列数。开发者可为irregularIndexes中指明的index对应的GridItem设置占用的行数和列数。在API version 12之前,垂直滚动Grid不支持GridItem占多行,水平滚动Grid不支持GridItem占多列。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
62e41f4b71Sopenharmony_ci| onGetRectByIndex<sup>11+</sup> | (index: number) => [number, number,number,number] | 否  | 设置指定索引index对应的GridItem的位置及大小[rowStart,columnStart,rowSpan,columnSpan]。 <br/>其中rowStart为行起始位置,columnStart为列起始位置,无单位。 <br/>rowSpan为GridItem占用的行数,columnSpan为GridItem占用的列数,无单位。 <br/>rowStart和columnStart取大于等于0的自然数,若取负数时,rowStart和columnStart默认为0。 <br/>rowSpan和columnSpan取大于等于1的自然数,若取小数则向下取整,若小于1则按1计算。<br/>**说明:** <br/>第一种情况:某个GridItem发现给它指定的起始位置被占据了,则从起始位置[0,0]开始按顺序从左到右,从上到下寻找起始的放置位置。<br/>第二种情况:如果起始位置没有被占据,但其他位置被占据了,无法显示全部的GridItem大小,则只会布局一部分。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
63e41f4b71Sopenharmony_ci
64e41f4b71Sopenharmony_ci## 属性
65e41f4b71Sopenharmony_ci
66e41f4b71Sopenharmony_ci除支持[通用属性](ts-universal-attributes-size.md)和[滚动组件通用属性](ts-container-scrollable-common.md#属性)外,还支持以下属性:
67e41f4b71Sopenharmony_ci
68e41f4b71Sopenharmony_ci### columnsTemplate
69e41f4b71Sopenharmony_ci
70e41f4b71Sopenharmony_cicolumnsTemplate(value: string)
71e41f4b71Sopenharmony_ci
72e41f4b71Sopenharmony_ci设置当前网格布局列的数量、固定列宽或最小列宽值,不设置时默认1列。
73e41f4b71Sopenharmony_ci
74e41f4b71Sopenharmony_ci例如,&nbsp;'1fr&nbsp;1fr&nbsp;2fr'&nbsp;是将父组件分3列,将父组件允许的宽分为4等份,第一列占1份,第二列占1份,第三列占2份。
75e41f4b71Sopenharmony_ci
76e41f4b71Sopenharmony_cicolumnsTemplate('repeat(auto-fit, track-size)')是设置最小列宽值为track-size,自动计算列数和实际列宽。
77e41f4b71Sopenharmony_ci
78e41f4b71Sopenharmony_cicolumnsTemplate('repeat(auto-fill, track-size)')是设置固定列宽值为track-size,自动计算列数。
79e41f4b71Sopenharmony_ci
80e41f4b71Sopenharmony_cicolumnsTemplate('repeat(auto-stretch, track-size)')是设置固定列宽值为track-size,使用columnsGap为最小列间距,自动计算列数和实际列间距。
81e41f4b71Sopenharmony_ci
82e41f4b71Sopenharmony_ci其中repeat、auto-fit、auto-fill、auto-stretch为关键字。track-size为列宽,支持的单位包括px、vp、%或有效数字,默认单位为vp,track-size至少包括一个有效列宽。<br/>
83e41f4b71Sopenharmony_ciauto-stretch模式只支持track-size为一个有效列宽值,并且track-size只支持px、vp和有效数字,不支持%。
84e41f4b71Sopenharmony_ci
85e41f4b71Sopenharmony_ci使用效果可以参考示[示例8](#示例8)。
86e41f4b71Sopenharmony_ci
87e41f4b71Sopenharmony_ci设置为'0fr'时,该列的列宽为0,不显示GridItem。设置为其他非法值时,GridItem显示为固定1列。
88e41f4b71Sopenharmony_ci
89e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
90e41f4b71Sopenharmony_ci
91e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
92e41f4b71Sopenharmony_ci
93e41f4b71Sopenharmony_ci**参数:** 
94e41f4b71Sopenharmony_ci
95e41f4b71Sopenharmony_ci| 参数名 | 类型   | 必填 | 说明                               |
96e41f4b71Sopenharmony_ci| ------ | ------ | ---- | ---------------------------------- |
97e41f4b71Sopenharmony_ci| value  | string | 是   | 当前网格布局列的数量或最小列宽值。 |
98e41f4b71Sopenharmony_ci
99e41f4b71Sopenharmony_ci### rowsTemplate
100e41f4b71Sopenharmony_ci
101e41f4b71Sopenharmony_cirowsTemplate(value: string)
102e41f4b71Sopenharmony_ci
103e41f4b71Sopenharmony_ci设置当前网格布局行的数量、固定行高或最小行高值,不设置时默认1行。
104e41f4b71Sopenharmony_ci
105e41f4b71Sopenharmony_ci例如,&nbsp;'1fr&nbsp;1fr&nbsp;2fr'是将父组件分3行,将父组件允许的高分为4等份,第一行占1份,第二行占一份,第三行占2份。
106e41f4b71Sopenharmony_ci
107e41f4b71Sopenharmony_cirowsTemplate('repeat(auto-fit, track-size)')是设置最小行高值为track-size,自动计算行数和实际行高。
108e41f4b71Sopenharmony_ci
109e41f4b71Sopenharmony_cirowsTemplate('repeat(auto-fill, track-size)')是设置固定行高值为track-size,自动计算行数。
110e41f4b71Sopenharmony_ci
111e41f4b71Sopenharmony_cirowsTemplate('repeat(auto-stretch, track-size)')是设置固定行高值为track-size,使用rowsGap为最小行间距,自动计算行数和实际行间距。
112e41f4b71Sopenharmony_ci
113e41f4b71Sopenharmony_ci其中repeat、auto-fit、auto-fill、auto-stretch为关键字。track-size为行高,支持的单位包括px、vp、%或有效数字,默认单位为vp,track-size至少包括一个有效行高。<br/>
114e41f4b71Sopenharmony_ciauto-stretch模式只支持track-size为一个有效行高值,并且track-size只支持px、vp和有效数字,不支持%。
115e41f4b71Sopenharmony_ci
116e41f4b71Sopenharmony_ci设置为'0fr',则这一行的行宽为0,这一行GridItem不显示。设置为其他非法值,按固定1行处理。
117e41f4b71Sopenharmony_ci
118e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
119e41f4b71Sopenharmony_ci
120e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
121e41f4b71Sopenharmony_ci
122e41f4b71Sopenharmony_ci**参数:** 
123e41f4b71Sopenharmony_ci
124e41f4b71Sopenharmony_ci| 参数名 | 类型   | 必填 | 说明                               |
125e41f4b71Sopenharmony_ci| ------ | ------ | ---- | ---------------------------------- |
126e41f4b71Sopenharmony_ci| value  | string | 是   | 当前网格布局行的数量或最小行高值。 |
127e41f4b71Sopenharmony_ci
128e41f4b71Sopenharmony_ci>  **说明:**
129e41f4b71Sopenharmony_ci>
130e41f4b71Sopenharmony_ci>  Grid组件根据rowsTemplate、columnsTemplate属性的设置情况,可分为以下三种布局模式:
131e41f4b71Sopenharmony_ci>
132e41f4b71Sopenharmony_ci>  1、rowsTemplate、columnsTemplate同时设置:
133e41f4b71Sopenharmony_ci>
134e41f4b71Sopenharmony_ci>  - Grid只展示固定行列数的元素,其余元素不展示,且Grid不可滚动。
135e41f4b71Sopenharmony_ci>  - 此模式下以下属性不生效:layoutDirection、maxCount、minCount、cellLength。
136e41f4b71Sopenharmony_ci>  - Grid的宽高没有设置时,默认适应父组件尺寸。
137e41f4b71Sopenharmony_ci>  - Grid网格列大小按照Grid自身内容区域大小减去所有行列Gap后按各个行列所占比重分配。
138e41f4b71Sopenharmony_ci>  - GridItem默认填满网格大小。
139e41f4b71Sopenharmony_ci>
140e41f4b71Sopenharmony_ci>  2、rowsTemplate、columnsTemplate仅设置其中的一个:
141e41f4b71Sopenharmony_ci>
142e41f4b71Sopenharmony_ci>  - 元素按照设置的方向进行排布,超出Grid显示区域后,Grid可通过滚动的方式展示。
143e41f4b71Sopenharmony_ci>  - 如果设置了columnsTemplate,Grid滚动方向为垂直方向,主轴方向为垂直方向,交叉轴方向为水平方向。
144e41f4b71Sopenharmony_ci>  - 如果设置了rowsTemplate,Grid滚动方向为水平方向,主轴方向为水平方向,交叉轴方向为垂直方向。
145e41f4b71Sopenharmony_ci>  - 此模式下以下属性不生效:layoutDirection、maxCount、minCount、cellLength。
146e41f4b71Sopenharmony_ci>  - 网格交叉轴方向尺寸根据Grid自身内容区域交叉轴尺寸减去交叉轴方向所有Gap后按所占比重分配。
147e41f4b71Sopenharmony_ci>  - 网格主轴方向尺寸取当前网格交叉轴方向所有GridItem高度最大值。
148e41f4b71Sopenharmony_ci>
149e41f4b71Sopenharmony_ci>  3、rowsTemplate、columnsTemplate都不设置:
150e41f4b71Sopenharmony_ci>
151e41f4b71Sopenharmony_ci>  - 元素在layoutDirection方向上排布,列数由Grid的宽度、首个元素的宽度、minCount、maxCount、columnsGap共同决定。
152e41f4b71Sopenharmony_ci>  - 行数由Grid高度、首个元素高度、cellLength、rowsGap共同决定。超出行列容纳范围的元素不显示,也不能通过滚动进行展示。
153e41f4b71Sopenharmony_ci>  - 此模式下仅生效以下属性:layoutDirection、maxCount、minCount、cellLength、editMode、columnsGap、rowsGap。
154e41f4b71Sopenharmony_ci>  - 当前layoutDirection设置为Row时,先从左到右排列,排满一行再排下一行。剩余高度不足时不再布局,整体内容顶部居中。
155e41f4b71Sopenharmony_ci>  - 当前layoutDirection设置为Column时,先从上到下排列,排满一列再排下一列,剩余宽度不足时不再布局。整体内容顶部居中。
156e41f4b71Sopenharmony_ci>  - 当前Grid下面没有GridItem时,Grid的宽高为0。
157e41f4b71Sopenharmony_ci>
158e41f4b71Sopenharmony_ci
159e41f4b71Sopenharmony_ci### columnsGap
160e41f4b71Sopenharmony_ci
161e41f4b71Sopenharmony_cicolumnsGap(value: Length)
162e41f4b71Sopenharmony_ci
163e41f4b71Sopenharmony_ci设置列与列的间距。设置为小于0的值时,按默认值显示。
164e41f4b71Sopenharmony_ci
165e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
166e41f4b71Sopenharmony_ci
167e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
168e41f4b71Sopenharmony_ci
169e41f4b71Sopenharmony_ci**参数:** 
170e41f4b71Sopenharmony_ci
171e41f4b71Sopenharmony_ci| 参数名 | 类型                         | 必填 | 说明                         |
172e41f4b71Sopenharmony_ci| ------ | ---------------------------- | ---- | ---------------------------- |
173e41f4b71Sopenharmony_ci| value  | [Length](ts-types.md#length) | 是   | 列与列的间距。<br/>默认值:0 |
174e41f4b71Sopenharmony_ci
175e41f4b71Sopenharmony_ci### rowsGap
176e41f4b71Sopenharmony_ci
177e41f4b71Sopenharmony_cirowsGap(value: Length)
178e41f4b71Sopenharmony_ci
179e41f4b71Sopenharmony_ci设置行与行的间距。设置为小于0的值时,按默认值显示。
180e41f4b71Sopenharmony_ci
181e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
182e41f4b71Sopenharmony_ci
183e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
184e41f4b71Sopenharmony_ci
185e41f4b71Sopenharmony_ci**参数:** 
186e41f4b71Sopenharmony_ci
187e41f4b71Sopenharmony_ci| 参数名 | 类型                         | 必填 | 说明                         |
188e41f4b71Sopenharmony_ci| ------ | ---------------------------- | ---- | ---------------------------- |
189e41f4b71Sopenharmony_ci| value  | [Length](ts-types.md#length) | 是   | 行与行的间距。<br/>默认值:0 |
190e41f4b71Sopenharmony_ci
191e41f4b71Sopenharmony_ci### scrollBar
192e41f4b71Sopenharmony_ci
193e41f4b71Sopenharmony_ciscrollBar(value: BarState)
194e41f4b71Sopenharmony_ci
195e41f4b71Sopenharmony_ci设置滚动条状态。
196e41f4b71Sopenharmony_ci
197e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
198e41f4b71Sopenharmony_ci
199e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
200e41f4b71Sopenharmony_ci
201e41f4b71Sopenharmony_ci**参数:** 
202e41f4b71Sopenharmony_ci
203e41f4b71Sopenharmony_ci| 参数名 | 类型                                      | 必填 | 说明                                                         |
204e41f4b71Sopenharmony_ci| ------ | ----------------------------------------- | ---- | ------------------------------------------------------------ |
205e41f4b71Sopenharmony_ci| value  | [BarState](ts-appendix-enums.md#barstate) | 是   | 滚动条状态。<br/>默认值:BarState.Auto<br/>**说明:** <br/>API version 9及以下版本默认值为BarState.Off,API version 10及以上版本的默认值为BarState.Auto。 |
206e41f4b71Sopenharmony_ci
207e41f4b71Sopenharmony_ci### scrollBarColor
208e41f4b71Sopenharmony_ci
209e41f4b71Sopenharmony_ciscrollBarColor(value: Color | number | string)
210e41f4b71Sopenharmony_ci
211e41f4b71Sopenharmony_ci设置滚动条的颜色。
212e41f4b71Sopenharmony_ci
213e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
214e41f4b71Sopenharmony_ci
215e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
216e41f4b71Sopenharmony_ci
217e41f4b71Sopenharmony_ci**参数:** 
218e41f4b71Sopenharmony_ci
219e41f4b71Sopenharmony_ci| 参数名 | 类型                                                         | 必填 | 说明           |
220e41f4b71Sopenharmony_ci| ------ | ------------------------------------------------------------ | ---- | -------------- |
221e41f4b71Sopenharmony_ci| value  | [Color](ts-appendix-enums.md#color)&nbsp;\|&nbsp;number&nbsp;\|&nbsp;string | 是   | 滚动条的颜色。<br/>默认值:'\#182431'(40%不透明度) |
222e41f4b71Sopenharmony_ci
223e41f4b71Sopenharmony_ci### scrollBarWidth
224e41f4b71Sopenharmony_ci
225e41f4b71Sopenharmony_ciscrollBarWidth(value: number | string)
226e41f4b71Sopenharmony_ci
227e41f4b71Sopenharmony_ci设置滚动条的宽度,不支持百分比设置。宽度设置后,滚动条正常状态和按压状态宽度均为滚动条的宽度值。如果滚动条的宽度超过Grid组件主轴方向的高度,则滚动条的宽度会变为默认值。
228e41f4b71Sopenharmony_ci
229e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
230e41f4b71Sopenharmony_ci
231e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
232e41f4b71Sopenharmony_ci
233e41f4b71Sopenharmony_ci**参数:** 
234e41f4b71Sopenharmony_ci
235e41f4b71Sopenharmony_ci| 参数名 | 类型                       | 必填 | 说明                                      |
236e41f4b71Sopenharmony_ci| ------ | -------------------------- | ---- | ----------------------------------------- |
237e41f4b71Sopenharmony_ci| value  | number&nbsp;\|&nbsp;string | 是   | 滚动条的宽度。<br/>默认值:4<br/>单位:vp |
238e41f4b71Sopenharmony_ci
239e41f4b71Sopenharmony_ci### cachedCount
240e41f4b71Sopenharmony_ci
241e41f4b71Sopenharmony_cicachedCount(value: number)
242e41f4b71Sopenharmony_ci
243e41f4b71Sopenharmony_ci设置预加载的GridItem的数量,只在[LazyForEach](../../../quick-start/arkts-rendering-control-lazyforeach.md)和开启了virtualScroll开关的[Repeat](../../../quick-start/arkts-new-rendering-control-repeat.md)中生效。设置为小于0的值时,按默认值显示。<!--Del-->具体使用可参考[减少应用白块说明](../../../performance/arkts-performance-improvement-recommendation.md#减少应用滑动白块)。<!--DelEnd-->
244e41f4b71Sopenharmony_ci
245e41f4b71Sopenharmony_ci设置缓存后会在Grid显示区域上下各缓存cachedCount*列数个GridItem。
246e41f4b71Sopenharmony_ci
247e41f4b71Sopenharmony_ci[LazyForEach](../../../quick-start/arkts-rendering-control-lazyforeach.md)和开启了virtualScroll开关的[Repeat](../../../quick-start/arkts-new-rendering-control-repeat.md)超出显示和缓存范围的GridItem会被释放。
248e41f4b71Sopenharmony_ci
249e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
250e41f4b71Sopenharmony_ci
251e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
252e41f4b71Sopenharmony_ci
253e41f4b71Sopenharmony_ci**参数:** 
254e41f4b71Sopenharmony_ci
255e41f4b71Sopenharmony_ci| 参数名 | 类型   | 必填 | 说明                                   |
256e41f4b71Sopenharmony_ci| ------ | ------ | ---- | -------------------------------------- |
257e41f4b71Sopenharmony_ci| value  | number | 是   | 预加载的GridItem的数量。<br/>默认值:1 |
258e41f4b71Sopenharmony_ci
259e41f4b71Sopenharmony_ci### cachedCount<sup>14+</sup>
260e41f4b71Sopenharmony_ci
261e41f4b71Sopenharmony_cicachedCount(count: number, show: boolean)
262e41f4b71Sopenharmony_ci
263e41f4b71Sopenharmony_ci设置预加载的GridItem数量,并配置是否显示预加载节点。
264e41f4b71Sopenharmony_ci
265e41f4b71Sopenharmony_ci设置缓存后会在Grid显示区域上下各缓存cachedCount*列数个GridItem。配合[裁剪](ts-universal-attributes-sharp-clipping.md#clip12)或[内容裁剪](ts-container-scrollable-common.md#clipcontent14)属性可以显示出预加载节点。
266e41f4b71Sopenharmony_ci
267e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
268e41f4b71Sopenharmony_ci
269e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
270e41f4b71Sopenharmony_ci
271e41f4b71Sopenharmony_ci**参数:** 
272e41f4b71Sopenharmony_ci
273e41f4b71Sopenharmony_ci| 参数名 | 类型   | 必填 | 说明                                   |
274e41f4b71Sopenharmony_ci| ------ | ------ | ---- | -------------------------------------- |
275e41f4b71Sopenharmony_ci| count  | number | 是   | 预加载的GridItem的数量。<br/>默认值:1 |
276e41f4b71Sopenharmony_ci| show  | boolean | 是   | 被预加载的GridItem是否需要显示。 <br/> 默认值:false |
277e41f4b71Sopenharmony_ci
278e41f4b71Sopenharmony_ci### editMode<sup>8+</sup>
279e41f4b71Sopenharmony_ci
280e41f4b71Sopenharmony_cieditMode(value: boolean)
281e41f4b71Sopenharmony_ci
282e41f4b71Sopenharmony_ci设置Grid是否进入编辑模式,进入编辑模式可以拖拽Grid组件内部[GridItem](ts-container-griditem.md)。
283e41f4b71Sopenharmony_ci
284e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
285e41f4b71Sopenharmony_ci
286e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
287e41f4b71Sopenharmony_ci
288e41f4b71Sopenharmony_ci**参数:** 
289e41f4b71Sopenharmony_ci
290e41f4b71Sopenharmony_ci| 参数名 | 类型   | 必填 | 说明                                     |
291e41f4b71Sopenharmony_ci| ------ | ------ | ---- | ---------------------------------------- |
292e41f4b71Sopenharmony_ci| value  | boolean | 是   | Grid是否进入编辑模式。<br/>默认值:false |
293e41f4b71Sopenharmony_ci
294e41f4b71Sopenharmony_ci### layoutDirection<sup>8+</sup>
295e41f4b71Sopenharmony_ci
296e41f4b71Sopenharmony_cilayoutDirection(value: GridDirection)
297e41f4b71Sopenharmony_ci
298e41f4b71Sopenharmony_ci设置布局的主轴方向。
299e41f4b71Sopenharmony_ci
300e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
301e41f4b71Sopenharmony_ci
302e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
303e41f4b71Sopenharmony_ci
304e41f4b71Sopenharmony_ci**参数:** 
305e41f4b71Sopenharmony_ci
306e41f4b71Sopenharmony_ci| 参数名 | 类型                                     | 必填 | 说明                                           |
307e41f4b71Sopenharmony_ci| ------ | ---------------------------------------- | ---- | ---------------------------------------------- |
308e41f4b71Sopenharmony_ci| value  | [GridDirection](#griddirection8枚举说明) | 是   | 布局的主轴方向。<br/>默认值:GridDirection.Row |
309e41f4b71Sopenharmony_ci
310e41f4b71Sopenharmony_ci### maxCount<sup>8+</sup>
311e41f4b71Sopenharmony_ci
312e41f4b71Sopenharmony_cimaxCount(value: number)
313e41f4b71Sopenharmony_ci
314e41f4b71Sopenharmony_ci设置可显示的最大行数或列数。设置为小于1的值时,按默认值显示。
315e41f4b71Sopenharmony_ci
316e41f4b71Sopenharmony_ci当layoutDirection是Row/RowReverse时,表示可显示的最大列数。
317e41f4b71Sopenharmony_ci
318e41f4b71Sopenharmony_ci当layoutDirection是Column/ColumnReverse时,表示可显示的最大行数。
319e41f4b71Sopenharmony_ci
320e41f4b71Sopenharmony_ci当maxCount小于minCount时,maxCount和minCount都按默认值处理。
321e41f4b71Sopenharmony_ci
322e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
323e41f4b71Sopenharmony_ci
324e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
325e41f4b71Sopenharmony_ci
326e41f4b71Sopenharmony_ci**参数:** 
327e41f4b71Sopenharmony_ci
328e41f4b71Sopenharmony_ci| 参数名 | 类型   | 必填 | 说明                                          |
329e41f4b71Sopenharmony_ci| ------ | ------ | ---- | --------------------------------------------- |
330e41f4b71Sopenharmony_ci| value  | number | 是   | 可显示的最大行数或列数。<br/>默认值:Infinity |
331e41f4b71Sopenharmony_ci
332e41f4b71Sopenharmony_ci### minCount<sup>8+</sup>
333e41f4b71Sopenharmony_ci
334e41f4b71Sopenharmony_ciminCount(value: number)
335e41f4b71Sopenharmony_ci
336e41f4b71Sopenharmony_ci设置可显示的最小行数或列数。设置为小于1的值时,按默认值显示。
337e41f4b71Sopenharmony_ci
338e41f4b71Sopenharmony_ci当layoutDirection是Row/RowReverse时,表示可显示的最小列数。
339e41f4b71Sopenharmony_ci
340e41f4b71Sopenharmony_ci当layoutDirection是Column/ColumnReverse时,表示可显示的最小行数。
341e41f4b71Sopenharmony_ci
342e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
343e41f4b71Sopenharmony_ci
344e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
345e41f4b71Sopenharmony_ci
346e41f4b71Sopenharmony_ci**参数:** 
347e41f4b71Sopenharmony_ci
348e41f4b71Sopenharmony_ci| 参数名 | 类型   | 必填 | 说明                                   |
349e41f4b71Sopenharmony_ci| ------ | ------ | ---- | -------------------------------------- |
350e41f4b71Sopenharmony_ci| value  | number | 是   | 可显示的最小行数或列数。<br/>默认值:1 |
351e41f4b71Sopenharmony_ci
352e41f4b71Sopenharmony_ci### cellLength<sup>8+</sup>
353e41f4b71Sopenharmony_ci
354e41f4b71Sopenharmony_cicellLength(value: number)
355e41f4b71Sopenharmony_ci
356e41f4b71Sopenharmony_ci设置一行的高度或者一列的宽度。
357e41f4b71Sopenharmony_ci
358e41f4b71Sopenharmony_ci当layoutDirection是Row/RowReverse时,表示一行的高度。
359e41f4b71Sopenharmony_ci
360e41f4b71Sopenharmony_ci当layoutDirection是Column/ColumnReverse时,表示一列的宽度。
361e41f4b71Sopenharmony_ci
362e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
363e41f4b71Sopenharmony_ci
364e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
365e41f4b71Sopenharmony_ci
366e41f4b71Sopenharmony_ci**参数:** 
367e41f4b71Sopenharmony_ci
368e41f4b71Sopenharmony_ci| 参数名 | 类型   | 必填 | 说明                                                    |
369e41f4b71Sopenharmony_ci| ------ | ------ | ---- | ------------------------------------------------------- |
370e41f4b71Sopenharmony_ci| value  | number | 是   | 一行的高度或者一列的宽度。<br/>默认值:第一个元素的大小 <br/>单位:vp|
371e41f4b71Sopenharmony_ci
372e41f4b71Sopenharmony_ci### multiSelectable<sup>8+</sup>
373e41f4b71Sopenharmony_ci
374e41f4b71Sopenharmony_cimultiSelectable(value: boolean)
375e41f4b71Sopenharmony_ci
376e41f4b71Sopenharmony_ci设置是否开启鼠标框选。开启框选后,可以配合Griditem的selected属性和onSelect事件获取GridItem的选中状态,还可以设置[选中态样式](./ts-universal-attributes-polymorphic-style.md)(无默认选中样式)。
377e41f4b71Sopenharmony_ci
378e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
379e41f4b71Sopenharmony_ci
380e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
381e41f4b71Sopenharmony_ci
382e41f4b71Sopenharmony_ci**参数:** 
383e41f4b71Sopenharmony_ci
384e41f4b71Sopenharmony_ci| 参数名 | 类型    | 必填 | 说明                                                         |
385e41f4b71Sopenharmony_ci| ------ | ------- | ---- | ------------------------------------------------------------ |
386e41f4b71Sopenharmony_ci| value  | boolean | 是   | 是否开启鼠标框选。<br/>默认值:false<br/>false:关闭框选。true:开启框选。 |
387e41f4b71Sopenharmony_ci
388e41f4b71Sopenharmony_ci### supportAnimation<sup>8+</sup>
389e41f4b71Sopenharmony_ci
390e41f4b71Sopenharmony_cisupportAnimation(value: boolean)
391e41f4b71Sopenharmony_ci
392e41f4b71Sopenharmony_ci设置是否支持动画。当前支持GridItem拖拽动画。仅在滚动模式下(只设置rowsTemplate、columnsTemplate其中一个)支持动画。<br/>仅在大小规则的Grid中支持拖拽动画,跨行或跨列场景不支持。
393e41f4b71Sopenharmony_ci
394e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
395e41f4b71Sopenharmony_ci
396e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
397e41f4b71Sopenharmony_ci
398e41f4b71Sopenharmony_ci**参数:** 
399e41f4b71Sopenharmony_ci
400e41f4b71Sopenharmony_ci| 参数名 | 类型    | 必填 | 说明                             |
401e41f4b71Sopenharmony_ci| ------ | ------- | ---- | -------------------------------- |
402e41f4b71Sopenharmony_ci| value  | boolean | 是   | 是否支持动画。<br/>默认值:false |
403e41f4b71Sopenharmony_ci
404e41f4b71Sopenharmony_ci### edgeEffect<sup>10+</sup>
405e41f4b71Sopenharmony_ci
406e41f4b71Sopenharmony_ciedgeEffect(value: EdgeEffect, options?: EdgeEffectOptions)
407e41f4b71Sopenharmony_ci
408e41f4b71Sopenharmony_ci设置边缘滑动效果。
409e41f4b71Sopenharmony_ci
410e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
411e41f4b71Sopenharmony_ci
412e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
413e41f4b71Sopenharmony_ci
414e41f4b71Sopenharmony_ci**参数:** 
415e41f4b71Sopenharmony_ci
416e41f4b71Sopenharmony_ci| 参数名                | 类型                                                         | 必填 | 说明                                                         |
417e41f4b71Sopenharmony_ci| --------------------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
418e41f4b71Sopenharmony_ci| value                 | [EdgeEffect](ts-appendix-enums.md#edgeeffect)                | 是   | Grid组件的边缘滑动效果,支持弹簧效果和阴影效果。<br/>默认值:EdgeEffect.None |
419e41f4b71Sopenharmony_ci| options<sup>11+</sup> | [EdgeEffectOptions](ts-container-scrollable-common.md#edgeeffectoptions11对象说明) | 否   | 组件内容大小小于组件自身时,是否开启滑动效果。设置为{ alwaysEnabled: true }会开启滑动效果,{ alwaysEnabled: false }不开启。<br/>默认值:{ alwaysEnabled: false } |
420e41f4b71Sopenharmony_ci
421e41f4b71Sopenharmony_ci### enableScrollInteraction<sup>10+</sup>
422e41f4b71Sopenharmony_ci
423e41f4b71Sopenharmony_cienableScrollInteraction(value: boolean)
424e41f4b71Sopenharmony_ci
425e41f4b71Sopenharmony_ci设置是否支持滚动手势,当设置为false时,无法通过手指或者鼠标滚动,但不影响控制器的滚动接口。
426e41f4b71Sopenharmony_ci
427e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
428e41f4b71Sopenharmony_ci
429e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
430e41f4b71Sopenharmony_ci
431e41f4b71Sopenharmony_ci**参数:** 
432e41f4b71Sopenharmony_ci
433e41f4b71Sopenharmony_ci| 参数名 | 类型    | 必填 | 说明                                |
434e41f4b71Sopenharmony_ci| ------ | ------- | ---- | ----------------------------------- |
435e41f4b71Sopenharmony_ci| value  | boolean | 是   | 是否支持滚动手势。<br/>默认值:true |
436e41f4b71Sopenharmony_ci
437e41f4b71Sopenharmony_ci### nestedScroll<sup>10+</sup>
438e41f4b71Sopenharmony_ci
439e41f4b71Sopenharmony_cinestedScroll(value: NestedScrollOptions)
440e41f4b71Sopenharmony_ci
441e41f4b71Sopenharmony_ci设置嵌套滚动选项。设置向前向后两个方向上的嵌套滚动模式,实现与父组件的滚动联动。
442e41f4b71Sopenharmony_ci
443e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
444e41f4b71Sopenharmony_ci
445e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
446e41f4b71Sopenharmony_ci
447e41f4b71Sopenharmony_ci**参数:** 
448e41f4b71Sopenharmony_ci
449e41f4b71Sopenharmony_ci| 参数名 | 类型                                                         | 必填 | 说明           |
450e41f4b71Sopenharmony_ci| ------ | ------------------------------------------------------------ | ---- | -------------- |
451e41f4b71Sopenharmony_ci| value  | [NestedScrollOptions](ts-container-scrollable-common.md#nestedscrolloptions10对象说明) | 是   | 嵌套滚动选项。 |
452e41f4b71Sopenharmony_ci
453e41f4b71Sopenharmony_ci### friction<sup>10+</sup>
454e41f4b71Sopenharmony_ci
455e41f4b71Sopenharmony_cifriction(value: number | Resource)
456e41f4b71Sopenharmony_ci
457e41f4b71Sopenharmony_ci设置摩擦系数,手动划动滚动区域时生效,只对惯性滚动过程有影响,对惯性滚动过程中的链式效果有间接影响。设置为小于等于0的值时,按默认值处理
458e41f4b71Sopenharmony_ci
459e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
460e41f4b71Sopenharmony_ci
461e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
462e41f4b71Sopenharmony_ci
463e41f4b71Sopenharmony_ci**参数:** 
464e41f4b71Sopenharmony_ci
465e41f4b71Sopenharmony_ci| 参数名 | 类型                                                 | 必填 | 说明                                                        |
466e41f4b71Sopenharmony_ci| ------ | ---------------------------------------------------- | ---- | ----------------------------------------------------------- |
467e41f4b71Sopenharmony_ci| value  | number&nbsp;\|&nbsp;[Resource](ts-types.md#resource) | 是   | 摩擦系数。<br/>默认值:非可穿戴设备为0.6,可穿戴设备为0.9。<br/>从API version 11开始,非可穿戴设备默认值为0.7。<br/>从API version 12开始,非可穿戴设备默认值为0.75。 |
468e41f4b71Sopenharmony_ci
469e41f4b71Sopenharmony_ci### alignItems<sup>12+</sup>
470e41f4b71Sopenharmony_ci
471e41f4b71Sopenharmony_cialignItems(alignment: Optional\<GridItemAlignment\>)
472e41f4b71Sopenharmony_ci
473e41f4b71Sopenharmony_ci设置Grid中GridItem的对齐方式, 使用方法可以参考[示例9](#示例9)。
474e41f4b71Sopenharmony_ci
475e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
476e41f4b71Sopenharmony_ci
477e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
478e41f4b71Sopenharmony_ci
479e41f4b71Sopenharmony_ci**参数:** 
480e41f4b71Sopenharmony_ci
481e41f4b71Sopenharmony_ci| 参数名     | 类型   | 必填 | 说明                            |
482e41f4b71Sopenharmony_ci| ---------- | ------ | ---- | ------------------------------- |
483e41f4b71Sopenharmony_ci| alignment | Optional\<[GridItemAlignment](#griditemalignment12枚举说明)\> | 是   | 设置Grid中GridItem的对齐方式。<br/>默认值:GridItemAlignment.DEFAULT |
484e41f4b71Sopenharmony_ci
485e41f4b71Sopenharmony_ci## GridItemAlignment<sup>12+</sup>枚举说明
486e41f4b71Sopenharmony_ci
487e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
488e41f4b71Sopenharmony_ci
489e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
490e41f4b71Sopenharmony_ci
491e41f4b71Sopenharmony_ci| 名称   | 值 | 说明                                 |
492e41f4b71Sopenharmony_ci| ------ |------| -------------------------------------- |
493e41f4b71Sopenharmony_ci| DEFAULT  |  0  | 使用Grid的默认对齐方式。 |
494e41f4b71Sopenharmony_ci| STRETCH |  1  | 以一行中的最高的GridItem作为其他GridItem的高度。 |
495e41f4b71Sopenharmony_ci
496e41f4b71Sopenharmony_ci
497e41f4b71Sopenharmony_ci> **说明:** 
498e41f4b71Sopenharmony_ci>
499e41f4b71Sopenharmony_ci> 1、只有可滚动的Grid中,设置STRETCH参数会生效,其他场景不生效。<br/>
500e41f4b71Sopenharmony_ci> 2、在Grid的一行中,如果每个GridItem都是大小规律的(只占一行一列),设置STRETCH参数会生效,存在跨行或跨列的GridItem的场景不生效。<br/>
501e41f4b71Sopenharmony_ci> 3、设置STRETCH后,只有不设置高度的GridItem才会以当前行中最高的GridItem作为自己的高度,设置过高度的GridItem高度不会变化。<br/>
502e41f4b71Sopenharmony_ci> 4、设置STRETCH后,Grid布局时会有额外的布局流程,可能会带来额外的性能开销。
503e41f4b71Sopenharmony_ci
504e41f4b71Sopenharmony_ci## GridDirection<sup>8+</sup>枚举说明
505e41f4b71Sopenharmony_ci
506e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
507e41f4b71Sopenharmony_ci
508e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
509e41f4b71Sopenharmony_ci
510e41f4b71Sopenharmony_ci| 名称   |值| 说明                                 |
511e41f4b71Sopenharmony_ci| ------ |------| -------------------------------------- |
512e41f4b71Sopenharmony_ci| Row  |  0  | 主轴布局方向沿水平方向布局,即自左往右先填满一行,再去填下一行。 |
513e41f4b71Sopenharmony_ci| Column |  1  | 主轴布局方向沿垂直方向布局,即自上往下先填满一列,再去填下一列。 |
514e41f4b71Sopenharmony_ci| RowReverse    |  2  | 主轴布局方向沿水平方向反向布局,即自右往左先填满一行,再去填下一行。 |
515e41f4b71Sopenharmony_ci| ColumnReverse   |  3  | 主轴布局方向沿垂直方向反向布局,即自下往上先填满一列,再去填下一列。 |
516e41f4b71Sopenharmony_ci
517e41f4b71Sopenharmony_ci> **说明:** 
518e41f4b71Sopenharmony_ci>
519e41f4b71Sopenharmony_ci> Grid组件[通用属性clip](ts-universal-attributes-sharp-clipping.md)的默认值为true。
520e41f4b71Sopenharmony_ci
521e41f4b71Sopenharmony_ci## 事件
522e41f4b71Sopenharmony_ci
523e41f4b71Sopenharmony_ci除支持[通用事件](ts-universal-events-click.md)和[滚动组件通用事件](ts-container-scrollable-common.md#事件)外,还支持以下事件:
524e41f4b71Sopenharmony_ci
525e41f4b71Sopenharmony_ci### onScrollIndex
526e41f4b71Sopenharmony_ci
527e41f4b71Sopenharmony_cionScrollIndex(event: (first: number, last: number) => void)
528e41f4b71Sopenharmony_ci
529e41f4b71Sopenharmony_ci当前网格显示的起始位置/终止位置的item发生变化时触发。网格初始化时会触发一次。Grid显示区域上第一个子组件/最后一个组件的索引值有变化就会触发。
530e41f4b71Sopenharmony_ci
531e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
532e41f4b71Sopenharmony_ci
533e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
534e41f4b71Sopenharmony_ci
535e41f4b71Sopenharmony_ci**参数:** 
536e41f4b71Sopenharmony_ci
537e41f4b71Sopenharmony_ci| 参数名             | 类型   | 必填 | 说明                             |
538e41f4b71Sopenharmony_ci| ------------------ | ------ | ---- | -------------------------------- |
539e41f4b71Sopenharmony_ci| first              | number | 是   | 当前显示的网格起始位置的索引值。 |
540e41f4b71Sopenharmony_ci| last<sup>10+</sup> | number | 是   | 当前显示的网格终止位置的索引值。 |
541e41f4b71Sopenharmony_ci
542e41f4b71Sopenharmony_ci### onItemDragStart<sup>8+</sup>
543e41f4b71Sopenharmony_ci
544e41f4b71Sopenharmony_cionItemDragStart(event: (event: ItemDragInfo, itemIndex: number) => (() => any) \| void)
545e41f4b71Sopenharmony_ci
546e41f4b71Sopenharmony_ci开始拖拽网格元素时触发。返回void表示不能拖拽。
547e41f4b71Sopenharmony_ci
548e41f4b71Sopenharmony_ci手指长按GridItem时触发该事件。
549e41f4b71Sopenharmony_ci
550e41f4b71Sopenharmony_ci由于拖拽检测也需要长按,且事件处理机制优先触发子组件事件,GridItem上绑定LongPressGesture时无法触发拖拽。如有长按和拖拽同时使用的需求可以使用通用拖拽事件。
551e41f4b71Sopenharmony_ci
552e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
553e41f4b71Sopenharmony_ci
554e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
555e41f4b71Sopenharmony_ci
556e41f4b71Sopenharmony_ci**参数:** 
557e41f4b71Sopenharmony_ci
558e41f4b71Sopenharmony_ci| 参数名    | 类型                                  | 必填 | 说明                   |
559e41f4b71Sopenharmony_ci| --------- | ------------------------------------- | ---- | ---------------------- |
560e41f4b71Sopenharmony_ci| event     | [ItemDragInfo](ts-container-scrollable-common.md#itemdraginfo对象说明) | 是   | 拖拽点的信息。         |
561e41f4b71Sopenharmony_ci| itemIndex | number                                | 是   | 被拖拽网格元素索引值。 |
562e41f4b71Sopenharmony_ci
563e41f4b71Sopenharmony_ci### onItemDragEnter<sup>8+</sup>
564e41f4b71Sopenharmony_ci
565e41f4b71Sopenharmony_cionItemDragEnter(event: (event: ItemDragInfo) => void)
566e41f4b71Sopenharmony_ci
567e41f4b71Sopenharmony_ci拖拽进入网格元素范围内时触发。
568e41f4b71Sopenharmony_ci
569e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
570e41f4b71Sopenharmony_ci
571e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
572e41f4b71Sopenharmony_ci
573e41f4b71Sopenharmony_ci**参数:** 
574e41f4b71Sopenharmony_ci
575e41f4b71Sopenharmony_ci| 参数名 | 类型                                  | 必填 | 说明           |
576e41f4b71Sopenharmony_ci| ------ | ------------------------------------- | ---- | -------------- |
577e41f4b71Sopenharmony_ci| event  | [ItemDragInfo](ts-container-scrollable-common.md#itemdraginfo对象说明) | 是   | 拖拽点的信息。 |
578e41f4b71Sopenharmony_ci
579e41f4b71Sopenharmony_ci### onItemDragMove<sup>8+</sup>
580e41f4b71Sopenharmony_ci
581e41f4b71Sopenharmony_cionItemDragMove(event: (event: ItemDragInfo, itemIndex: number, insertIndex: number) => void)
582e41f4b71Sopenharmony_ci
583e41f4b71Sopenharmony_ci拖拽在网格元素范围内移动时触发。
584e41f4b71Sopenharmony_ci
585e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
586e41f4b71Sopenharmony_ci
587e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
588e41f4b71Sopenharmony_ci
589e41f4b71Sopenharmony_ci**参数:** 
590e41f4b71Sopenharmony_ci
591e41f4b71Sopenharmony_ci| 参数名      | 类型                                  | 必填 | 说明           |
592e41f4b71Sopenharmony_ci| ----------- | ------------------------------------- | ---- | -------------- |
593e41f4b71Sopenharmony_ci| event       | [ItemDragInfo](ts-container-scrollable-common.md#itemdraginfo对象说明) | 是   | 拖拽点的信息。 |
594e41f4b71Sopenharmony_ci| itemIndex   | number                                | 是   | 拖拽起始位置。 |
595e41f4b71Sopenharmony_ci| insertIndex | number                                | 是   | 拖拽插入位置。 |
596e41f4b71Sopenharmony_ci
597e41f4b71Sopenharmony_ci### onItemDragLeave<sup>8+</sup>
598e41f4b71Sopenharmony_ci
599e41f4b71Sopenharmony_cionItemDragLeave(event: (event: ItemDragInfo, itemIndex: number) => void)
600e41f4b71Sopenharmony_ci
601e41f4b71Sopenharmony_ci拖拽离开网格元素时触发。
602e41f4b71Sopenharmony_ci
603e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
604e41f4b71Sopenharmony_ci
605e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
606e41f4b71Sopenharmony_ci
607e41f4b71Sopenharmony_ci**参数:** 
608e41f4b71Sopenharmony_ci
609e41f4b71Sopenharmony_ci| 参数名    | 类型                                  | 必填 | 说明                       |
610e41f4b71Sopenharmony_ci| --------- | ------------------------------------- | ---- | -------------------------- |
611e41f4b71Sopenharmony_ci| event     | [ItemDragInfo](ts-container-scrollable-common.md#itemdraginfo对象说明) | 是   | 拖拽点的信息。             |
612e41f4b71Sopenharmony_ci| itemIndex | number                                | 是   | 拖拽离开的网格元素索引值。 |
613e41f4b71Sopenharmony_ci
614e41f4b71Sopenharmony_ci### onItemDrop<sup>8+</sup>
615e41f4b71Sopenharmony_ci
616e41f4b71Sopenharmony_cionItemDrop(event: (event: ItemDragInfo, itemIndex: number, insertIndex: number, isSuccess: boolean) => void)
617e41f4b71Sopenharmony_ci
618e41f4b71Sopenharmony_ci绑定该事件的网格元素可作为拖拽释放目标,当在网格元素内停止拖拽时触发。
619e41f4b71Sopenharmony_ci
620e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
621e41f4b71Sopenharmony_ci
622e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
623e41f4b71Sopenharmony_ci
624e41f4b71Sopenharmony_ci**参数:** 
625e41f4b71Sopenharmony_ci
626e41f4b71Sopenharmony_ci| 参数名      | 类型                                  | 必填 | 说明           |
627e41f4b71Sopenharmony_ci| ----------- | ------------------------------------- | ---- | -------------- |
628e41f4b71Sopenharmony_ci| event       | [ItemDragInfo](ts-container-scrollable-common.md#itemdraginfo对象说明) | 是   | 拖拽点的信息。 |
629e41f4b71Sopenharmony_ci| itemIndex   | number                                | 是   | 拖拽起始位置。 |
630e41f4b71Sopenharmony_ci| insertIndex | number                                | 是   | 拖拽插入位置。 |
631e41f4b71Sopenharmony_ci| isSuccess   | boolean                               | 是   | 是否成功释放   |
632e41f4b71Sopenharmony_ci
633e41f4b71Sopenharmony_ci### onScrollBarUpdate<sup>10+</sup>
634e41f4b71Sopenharmony_ci
635e41f4b71Sopenharmony_cionScrollBarUpdate(event: (index: number, offset: number) => ComputedBarAttribute)
636e41f4b71Sopenharmony_ci
637e41f4b71Sopenharmony_ci当前网格显示的起始位置item发生变化时触发,可通过该回调设置滚动条的位置及长度。
638e41f4b71Sopenharmony_ci
639e41f4b71Sopenharmony_ci该接口只用作设置Grid的滚动条位置,不建议开发者在此接口中做业务逻辑处理。
640e41f4b71Sopenharmony_ci
641e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
642e41f4b71Sopenharmony_ci
643e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
644e41f4b71Sopenharmony_ci
645e41f4b71Sopenharmony_ci**参数:** 
646e41f4b71Sopenharmony_ci
647e41f4b71Sopenharmony_ci| 参数名 | 类型   | 必填 | 说明                                                         |
648e41f4b71Sopenharmony_ci| ------ | ------ | ---- | ------------------------------------------------------------ |
649e41f4b71Sopenharmony_ci| index  | number | 是   | 当前显示的网格起始位置的索引值。                             |
650e41f4b71Sopenharmony_ci| offset | number | 是   | 当前显示的网格起始位置元素相对网格显示起始位置的偏移,单位vp。 |
651e41f4b71Sopenharmony_ci
652e41f4b71Sopenharmony_ci**返回值:** 
653e41f4b71Sopenharmony_ci
654e41f4b71Sopenharmony_ci| 类型                                                  | 说明                 |
655e41f4b71Sopenharmony_ci| ----------------------------------------------------- | -------------------- |
656e41f4b71Sopenharmony_ci| [ComputedBarAttribute](#computedbarattribute10对象说明) | 滚动条的位置及长度。 |
657e41f4b71Sopenharmony_ci
658e41f4b71Sopenharmony_ci### onReachStart<sup>10+</sup>
659e41f4b71Sopenharmony_ci
660e41f4b71Sopenharmony_cionReachStart(event: () => void)
661e41f4b71Sopenharmony_ci
662e41f4b71Sopenharmony_ci网格到达起始位置时触发。
663e41f4b71Sopenharmony_ci
664e41f4b71Sopenharmony_ciGrid初始化时会触发一次,Grid滚动到起始位置时触发一次。Grid边缘效果为弹簧效果时,划动经过起始位置时触发一次,回弹回起始位置时再触发一次。
665e41f4b71Sopenharmony_ci
666e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
667e41f4b71Sopenharmony_ci
668e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
669e41f4b71Sopenharmony_ci
670e41f4b71Sopenharmony_ci### onReachEnd<sup>10+</sup>
671e41f4b71Sopenharmony_ci
672e41f4b71Sopenharmony_cionReachEnd(event: () => void)
673e41f4b71Sopenharmony_ci
674e41f4b71Sopenharmony_ci网格到达末尾位置时触发。
675e41f4b71Sopenharmony_ci
676e41f4b71Sopenharmony_ciGrid边缘效果为弹簧效果时,划动经过末尾位置时触发一次,回弹回末尾位置时再触发一次。
677e41f4b71Sopenharmony_ci
678e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
679e41f4b71Sopenharmony_ci
680e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
681e41f4b71Sopenharmony_ci
682e41f4b71Sopenharmony_ci### onScrollFrameBegin<sup>10+</sup>
683e41f4b71Sopenharmony_ci
684e41f4b71Sopenharmony_cionScrollFrameBegin(event: (offset: number, state:  ScrollState) => { offsetRemain: number })
685e41f4b71Sopenharmony_ci
686e41f4b71Sopenharmony_ci网格开始滑动时触发,事件参数传入即将发生的滑动量,事件处理函数中可根据应用场景计算实际需要的滑动量并作为事件处理函数的返回值返回,网格将按照返回值的实际滑动量进行滑动。
687e41f4b71Sopenharmony_ci
688e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
689e41f4b71Sopenharmony_ci
690e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
691e41f4b71Sopenharmony_ci
692e41f4b71Sopenharmony_ci**参数:** 
693e41f4b71Sopenharmony_ci
694e41f4b71Sopenharmony_ci| 参数名 | 类型                                                    | 必填 | 说明                       |
695e41f4b71Sopenharmony_ci| ------ | ------------------------------------------------------- | ---- | -------------------------- |
696e41f4b71Sopenharmony_ci| offset | number                                                  | 是   | 即将发生的滑动量,单位vp。 |
697e41f4b71Sopenharmony_ci| state  | [ScrollState](ts-container-list.md#scrollstate枚举说明) | 是   | 当前滑动状态。             |
698e41f4b71Sopenharmony_ci
699e41f4b71Sopenharmony_ci**返回值:** 
700e41f4b71Sopenharmony_ci
701e41f4b71Sopenharmony_ci| 类型                     | 说明                 |
702e41f4b71Sopenharmony_ci| ------------------------ | -------------------- |
703e41f4b71Sopenharmony_ci| { offsetRemain: number } | 实际滑动量,单位vp。 |
704e41f4b71Sopenharmony_ci
705e41f4b71Sopenharmony_ci### onScrollStart<sup>10+</sup>
706e41f4b71Sopenharmony_ci
707e41f4b71Sopenharmony_cionScrollStart(event: () => void)
708e41f4b71Sopenharmony_ci
709e41f4b71Sopenharmony_ci网格滑动开始时触发。手指拖动网格或网格的滚动条触发的滑动开始时,会触发该事件。使用[Scroller](ts-container-scroll.md#scroller)滑动控制器触发的带动画的滑动,动画开始时会触发该事件。
710e41f4b71Sopenharmony_ci
711e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
712e41f4b71Sopenharmony_ci
713e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
714e41f4b71Sopenharmony_ci
715e41f4b71Sopenharmony_ci### onScrollStop<sup>10+</sup>
716e41f4b71Sopenharmony_ci
717e41f4b71Sopenharmony_cionScrollStop(event: () => void)
718e41f4b71Sopenharmony_ci
719e41f4b71Sopenharmony_ci网格滑动停止时触发。手指拖动网格或网格的滚动条触发的滑动,手指离开屏幕并且滑动停止时会触发该事件。使用[Scroller](ts-container-scroll.md#scroller)滑动控制器触发的带动画的滑动,动画停止会触发该事件。
720e41f4b71Sopenharmony_ci
721e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
722e41f4b71Sopenharmony_ci
723e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
724e41f4b71Sopenharmony_ci
725e41f4b71Sopenharmony_ci### onScroll<sup>(deprecated)</sup>
726e41f4b71Sopenharmony_cionScroll(event: (scrollOffset: number, scrollState: [ScrollState](ts-container-list.md#scrollstate枚举说明)) => void) 
727e41f4b71Sopenharmony_ci
728e41f4b71Sopenharmony_ci网格滑动时触发。
729e41f4b71Sopenharmony_ci
730e41f4b71Sopenharmony_ci从API version 10开始使用。
731e41f4b71Sopenharmony_ci
732e41f4b71Sopenharmony_ci从API version 12开始废弃不再使用,建议使用[onDidScroll](ts-container-scrollable-common.md#ondidscroll12)替代。
733e41f4b71Sopenharmony_ci
734e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
735e41f4b71Sopenharmony_ci
736e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
737e41f4b71Sopenharmony_ci
738e41f4b71Sopenharmony_ci**参数:**
739e41f4b71Sopenharmony_ci
740e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 |
741e41f4b71Sopenharmony_ci| ------ | ------ | ------ | ------|
742e41f4b71Sopenharmony_ci| scrollOffset | number | 是 | 每帧滚动的偏移量,Grid的内容向上滚动时偏移量为正,向下滚动时偏移量为负。<br/>单位vp。 |
743e41f4b71Sopenharmony_ci| scrollState | [ScrollState](ts-container-list.md#scrollstate枚举说明) | 是 | 当前滑动状态。 |
744e41f4b71Sopenharmony_ci
745e41f4b71Sopenharmony_ci## ComputedBarAttribute<sup>10+</sup>对象说明
746e41f4b71Sopenharmony_ci
747e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
748e41f4b71Sopenharmony_ci
749e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
750e41f4b71Sopenharmony_ci
751e41f4b71Sopenharmony_ci| 名称         | 类型         | 只读 | 可选 |   说明         |
752e41f4b71Sopenharmony_ci| ----------- | ------------ | ---- | ---- | ---------- |
753e41f4b71Sopenharmony_ci| totalOffset | number | 否 | 否 |  Grid内容相对显示区域的总偏移,单位px。    |
754e41f4b71Sopenharmony_ci| totalLength   | number | 否 | 否 |  Grid内容总长度,单位px。    |
755e41f4b71Sopenharmony_ci
756e41f4b71Sopenharmony_ci## 示例
757e41f4b71Sopenharmony_ci
758e41f4b71Sopenharmony_ci### 示例1
759e41f4b71Sopenharmony_ci
760e41f4b71Sopenharmony_ci固定行列的Grid,可以使用GridLayoutOptions中的onGetRectByIndex指定GridItem的位置和大小。
761e41f4b71Sopenharmony_ci
762e41f4b71Sopenharmony_ci```ts
763e41f4b71Sopenharmony_ci// xxx.ets
764e41f4b71Sopenharmony_ci@Entry
765e41f4b71Sopenharmony_ci@Component
766e41f4b71Sopenharmony_cistruct GridExample {
767e41f4b71Sopenharmony_ci  @State numbers1: String[] = ['0', '1', '2', '3', '4']
768e41f4b71Sopenharmony_ci  @State numbers2: String[] = ['0', '1','2','3','4','5']
769e41f4b71Sopenharmony_ci
770e41f4b71Sopenharmony_ci  layoutOptions3: GridLayoutOptions = {
771e41f4b71Sopenharmony_ci    regularSize: [1, 1],
772e41f4b71Sopenharmony_ci    onGetRectByIndex: (index: number) => {
773e41f4b71Sopenharmony_ci      if (index == 0)
774e41f4b71Sopenharmony_ci        return [0, 0, 1, 1]
775e41f4b71Sopenharmony_ci      else if(index==1)
776e41f4b71Sopenharmony_ci        return [0, 1, 2, 2]
777e41f4b71Sopenharmony_ci      else if(index==2)
778e41f4b71Sopenharmony_ci        return [0 ,3 ,3 ,3]
779e41f4b71Sopenharmony_ci      else if(index==3)
780e41f4b71Sopenharmony_ci        return [3, 0, 3, 3]
781e41f4b71Sopenharmony_ci      else if(index==4)
782e41f4b71Sopenharmony_ci        return [4, 3, 2, 2]
783e41f4b71Sopenharmony_ci      else
784e41f4b71Sopenharmony_ci        return [5, 5, 1, 1]
785e41f4b71Sopenharmony_ci    }
786e41f4b71Sopenharmony_ci  }
787e41f4b71Sopenharmony_ci
788e41f4b71Sopenharmony_ci  build() {
789e41f4b71Sopenharmony_ci    Column({ space: 5 }) {
790e41f4b71Sopenharmony_ci      Grid() {
791e41f4b71Sopenharmony_ci        ForEach(this.numbers1, (day: string) => {
792e41f4b71Sopenharmony_ci          ForEach(this.numbers1, (day: string) => {
793e41f4b71Sopenharmony_ci            GridItem() {
794e41f4b71Sopenharmony_ci              Text(day)
795e41f4b71Sopenharmony_ci                .fontSize(16)
796e41f4b71Sopenharmony_ci                .backgroundColor(0xF9CF93)
797e41f4b71Sopenharmony_ci                .width('100%')
798e41f4b71Sopenharmony_ci                .height('100%')
799e41f4b71Sopenharmony_ci                .textAlign(TextAlign.Center)
800e41f4b71Sopenharmony_ci            }
801e41f4b71Sopenharmony_ci          }, (day: string) => day)
802e41f4b71Sopenharmony_ci        }, (day: string) => day)
803e41f4b71Sopenharmony_ci      }
804e41f4b71Sopenharmony_ci      .columnsTemplate('1fr 1fr 1fr 1fr 1fr')
805e41f4b71Sopenharmony_ci      .rowsTemplate('1fr 1fr 1fr 1fr 1fr')
806e41f4b71Sopenharmony_ci      .columnsGap(10)
807e41f4b71Sopenharmony_ci      .rowsGap(10)
808e41f4b71Sopenharmony_ci      .width('90%')
809e41f4b71Sopenharmony_ci      .backgroundColor(0xFAEEE0)
810e41f4b71Sopenharmony_ci      .height(300)
811e41f4b71Sopenharmony_ci
812e41f4b71Sopenharmony_ci      Text('GridLayoutOptions的使用:onGetRectByIndex。').fontColor(0xCCCCCC).fontSize(9).width('90%')
813e41f4b71Sopenharmony_ci
814e41f4b71Sopenharmony_ci      Grid(undefined, this.layoutOptions3) {
815e41f4b71Sopenharmony_ci        ForEach(this.numbers2, (day: string) => {
816e41f4b71Sopenharmony_ci          GridItem() {
817e41f4b71Sopenharmony_ci            Text(day)
818e41f4b71Sopenharmony_ci              .fontSize(16)
819e41f4b71Sopenharmony_ci              .backgroundColor(0xF9CF93)
820e41f4b71Sopenharmony_ci              .width('100%')
821e41f4b71Sopenharmony_ci              .height("100%")
822e41f4b71Sopenharmony_ci              .textAlign(TextAlign.Center)
823e41f4b71Sopenharmony_ci          }
824e41f4b71Sopenharmony_ci          .height("100%")
825e41f4b71Sopenharmony_ci          .width('100%')
826e41f4b71Sopenharmony_ci        }, (day: string) => day)
827e41f4b71Sopenharmony_ci      }
828e41f4b71Sopenharmony_ci      .columnsTemplate('1fr 1fr 1fr 1fr 1fr 1fr')
829e41f4b71Sopenharmony_ci      .rowsTemplate('1fr 1fr 1fr 1fr 1fr 1fr')
830e41f4b71Sopenharmony_ci      .columnsGap(10)
831e41f4b71Sopenharmony_ci      .rowsGap(10)
832e41f4b71Sopenharmony_ci      .width('90%')
833e41f4b71Sopenharmony_ci      .backgroundColor(0xFAEEE0)
834e41f4b71Sopenharmony_ci      .height(300)
835e41f4b71Sopenharmony_ci    }.width('100%').margin({ top: 5 })
836e41f4b71Sopenharmony_ci  }
837e41f4b71Sopenharmony_ci}
838e41f4b71Sopenharmony_ci```
839e41f4b71Sopenharmony_ci
840e41f4b71Sopenharmony_ci![zh-cn_image_0000001219744183](figures/zh-cn_image_0000001219744183.gif)
841e41f4b71Sopenharmony_ci
842e41f4b71Sopenharmony_ci### 示例2
843e41f4b71Sopenharmony_ci
844e41f4b71Sopenharmony_ci可滚动Grid,包括所有滚动属性和事件。
845e41f4b71Sopenharmony_ci
846e41f4b71Sopenharmony_ci```ts
847e41f4b71Sopenharmony_ci// xxx.ets
848e41f4b71Sopenharmony_ci@Entry
849e41f4b71Sopenharmony_ci@Component
850e41f4b71Sopenharmony_cistruct GridExample {
851e41f4b71Sopenharmony_ci  @State numbers: String[] = ['0', '1', '2', '3', '4']
852e41f4b71Sopenharmony_ci  scroller: Scroller = new Scroller()
853e41f4b71Sopenharmony_ci  @State gridPosition: number = 0 //0代表滚动到grid顶部,1代表中间值,2代表滚动到grid底部。
854e41f4b71Sopenharmony_ci
855e41f4b71Sopenharmony_ci  build() {
856e41f4b71Sopenharmony_ci    Column({ space: 5 }) {
857e41f4b71Sopenharmony_ci      Text('scroll').fontColor(0xCCCCCC).fontSize(9).width('90%')
858e41f4b71Sopenharmony_ci      Grid(this.scroller) {
859e41f4b71Sopenharmony_ci        ForEach(this.numbers, (day: string) => {
860e41f4b71Sopenharmony_ci          ForEach(this.numbers, (day: string) => {
861e41f4b71Sopenharmony_ci            GridItem() {
862e41f4b71Sopenharmony_ci              Text(day)
863e41f4b71Sopenharmony_ci                .fontSize(16)
864e41f4b71Sopenharmony_ci                .backgroundColor(0xF9CF93)
865e41f4b71Sopenharmony_ci                .width('100%')
866e41f4b71Sopenharmony_ci                .height(80)
867e41f4b71Sopenharmony_ci                .textAlign(TextAlign.Center)
868e41f4b71Sopenharmony_ci            }
869e41f4b71Sopenharmony_ci          }, (day: string) => day)
870e41f4b71Sopenharmony_ci        }, (day: string) => day)
871e41f4b71Sopenharmony_ci      }
872e41f4b71Sopenharmony_ci      .columnsTemplate('1fr 1fr 1fr 1fr 1fr')
873e41f4b71Sopenharmony_ci      .columnsGap(10)
874e41f4b71Sopenharmony_ci      .rowsGap(10)
875e41f4b71Sopenharmony_ci      .friction(0.6)
876e41f4b71Sopenharmony_ci      .enableScrollInteraction(true)
877e41f4b71Sopenharmony_ci      .supportAnimation(false)
878e41f4b71Sopenharmony_ci      .multiSelectable(false)
879e41f4b71Sopenharmony_ci      .edgeEffect(EdgeEffect.Spring)
880e41f4b71Sopenharmony_ci      .scrollBar(BarState.On)
881e41f4b71Sopenharmony_ci      .scrollBarColor(Color.Grey)
882e41f4b71Sopenharmony_ci      .scrollBarWidth(4)
883e41f4b71Sopenharmony_ci      .width('90%')
884e41f4b71Sopenharmony_ci      .backgroundColor(0xFAEEE0)
885e41f4b71Sopenharmony_ci      .height(300)
886e41f4b71Sopenharmony_ci      .onScrollIndex((first: number, last: number) => {
887e41f4b71Sopenharmony_ci        console.info(first.toString())
888e41f4b71Sopenharmony_ci        console.info(last.toString())
889e41f4b71Sopenharmony_ci      })
890e41f4b71Sopenharmony_ci      .onScrollBarUpdate((index: number, offset: number) => {
891e41f4b71Sopenharmony_ci        console.info("XXX" + 'Grid onScrollBarUpdate,index : ' + index.toString() + ",offset" + offset.toString())
892e41f4b71Sopenharmony_ci        return { totalOffset: (index / 5) * (80 + 10) - offset, totalLength: 80 * 5 + 10 * 4 }
893e41f4b71Sopenharmony_ci      })  //只适用于当前示例代码数据源,如果数据源有变化,则需要修改该部分代码,或者删掉此属性
894e41f4b71Sopenharmony_ci      .onDidScroll((scrollOffset: number, scrollState: ScrollState) => {
895e41f4b71Sopenharmony_ci        console.info(scrollOffset.toString())
896e41f4b71Sopenharmony_ci        console.info(scrollState.toString())
897e41f4b71Sopenharmony_ci      })
898e41f4b71Sopenharmony_ci      .onScrollStart(() => {
899e41f4b71Sopenharmony_ci        console.info("XXX" + "Grid onScrollStart")
900e41f4b71Sopenharmony_ci      })
901e41f4b71Sopenharmony_ci      .onScrollStop(() => {
902e41f4b71Sopenharmony_ci        console.info("XXX" + "Grid onScrollStop")
903e41f4b71Sopenharmony_ci      })
904e41f4b71Sopenharmony_ci      .onReachStart(() => {
905e41f4b71Sopenharmony_ci        this.gridPosition = 0
906e41f4b71Sopenharmony_ci        console.info("XXX" + "Grid onReachStart")
907e41f4b71Sopenharmony_ci      })
908e41f4b71Sopenharmony_ci      .onReachEnd(() => {
909e41f4b71Sopenharmony_ci        this.gridPosition = 2
910e41f4b71Sopenharmony_ci        console.info("XXX" + "Grid onReachEnd")
911e41f4b71Sopenharmony_ci      })
912e41f4b71Sopenharmony_ci
913e41f4b71Sopenharmony_ci      Button('next page')
914e41f4b71Sopenharmony_ci        .onClick(() => { // 点击后滑到下一页
915e41f4b71Sopenharmony_ci          this.scroller.scrollPage({ next: true })
916e41f4b71Sopenharmony_ci        })
917e41f4b71Sopenharmony_ci    }.width('100%').margin({ top: 5 })
918e41f4b71Sopenharmony_ci  }
919e41f4b71Sopenharmony_ci}
920e41f4b71Sopenharmony_ci```
921e41f4b71Sopenharmony_ci
922e41f4b71Sopenharmony_ci![scrollerExample2](figures/scrollerExample2.gif)
923e41f4b71Sopenharmony_ci
924e41f4b71Sopenharmony_ci### 示例3
925e41f4b71Sopenharmony_ci
926e41f4b71Sopenharmony_ciGridLayoutOptions的使用:irregularIndexes与onGetIrregularSizeByIndex。
927e41f4b71Sopenharmony_ci
928e41f4b71Sopenharmony_ci```ts
929e41f4b71Sopenharmony_ci// xxx.ets
930e41f4b71Sopenharmony_ci@Entry
931e41f4b71Sopenharmony_ci@Component
932e41f4b71Sopenharmony_cistruct GridExample {
933e41f4b71Sopenharmony_ci  @State numbers: String[] = ['0', '1', '2', '3', '4']
934e41f4b71Sopenharmony_ci  scroller: Scroller = new Scroller()
935e41f4b71Sopenharmony_ci  layoutOptions1: GridLayoutOptions = {
936e41f4b71Sopenharmony_ci    regularSize: [1, 1],        // 只支持[1, 1]
937e41f4b71Sopenharmony_ci    irregularIndexes: [0, 6],   // 索引为0和6的GridItem占用一行
938e41f4b71Sopenharmony_ci  }
939e41f4b71Sopenharmony_ci
940e41f4b71Sopenharmony_ci  layoutOptions2: GridLayoutOptions = {
941e41f4b71Sopenharmony_ci    regularSize: [1, 1],
942e41f4b71Sopenharmony_ci    irregularIndexes: [0, 7],   // 索引为0和7的GridItem占用的列数由onGetIrregularSizeByIndex指定
943e41f4b71Sopenharmony_ci    onGetIrregularSizeByIndex: (index: number) => {
944e41f4b71Sopenharmony_ci      if (index === 0) {
945e41f4b71Sopenharmony_ci        return [1, 5]
946e41f4b71Sopenharmony_ci      }
947e41f4b71Sopenharmony_ci      return [1, index % 6 + 1]
948e41f4b71Sopenharmony_ci    }
949e41f4b71Sopenharmony_ci  }
950e41f4b71Sopenharmony_ci
951e41f4b71Sopenharmony_ci  build() {
952e41f4b71Sopenharmony_ci    Column({ space: 5 }) {
953e41f4b71Sopenharmony_ci      Grid(this.scroller, this.layoutOptions1) {
954e41f4b71Sopenharmony_ci        ForEach(this.numbers, (day: string) => {
955e41f4b71Sopenharmony_ci          ForEach(this.numbers, (day: string) => {
956e41f4b71Sopenharmony_ci            GridItem() {
957e41f4b71Sopenharmony_ci              Text(day)
958e41f4b71Sopenharmony_ci                .fontSize(16)
959e41f4b71Sopenharmony_ci                .backgroundColor(0xF9CF93)
960e41f4b71Sopenharmony_ci                .width('100%')
961e41f4b71Sopenharmony_ci                .height(80)
962e41f4b71Sopenharmony_ci                .textAlign(TextAlign.Center)
963e41f4b71Sopenharmony_ci            }.selectable(false)
964e41f4b71Sopenharmony_ci          }, (day: string) => day)
965e41f4b71Sopenharmony_ci        }, (day: string) => day)
966e41f4b71Sopenharmony_ci      }
967e41f4b71Sopenharmony_ci      .columnsTemplate('1fr 1fr 1fr 1fr 1fr')
968e41f4b71Sopenharmony_ci      .columnsGap(10)
969e41f4b71Sopenharmony_ci      .rowsGap(10)
970e41f4b71Sopenharmony_ci      .multiSelectable(true)
971e41f4b71Sopenharmony_ci      .scrollBar(BarState.Off)
972e41f4b71Sopenharmony_ci      .width('90%')
973e41f4b71Sopenharmony_ci      .backgroundColor(0xFAEEE0)
974e41f4b71Sopenharmony_ci      .height(300)
975e41f4b71Sopenharmony_ci
976e41f4b71Sopenharmony_ci      Text('scroll').fontColor(0xCCCCCC).fontSize(9).width('90%')
977e41f4b71Sopenharmony_ci      // 不使用scroll,需要undefined占位
978e41f4b71Sopenharmony_ci      Grid(undefined, this.layoutOptions2) {
979e41f4b71Sopenharmony_ci        ForEach(this.numbers, (day: string) => {
980e41f4b71Sopenharmony_ci          ForEach(this.numbers, (day: string) => {
981e41f4b71Sopenharmony_ci            GridItem() {
982e41f4b71Sopenharmony_ci              Text(day)
983e41f4b71Sopenharmony_ci                .fontSize(16)
984e41f4b71Sopenharmony_ci                .backgroundColor(0xF9CF93)
985e41f4b71Sopenharmony_ci                .width('100%')
986e41f4b71Sopenharmony_ci                .height(80)
987e41f4b71Sopenharmony_ci                .textAlign(TextAlign.Center)
988e41f4b71Sopenharmony_ci            }
989e41f4b71Sopenharmony_ci          }, (day: string) => day)
990e41f4b71Sopenharmony_ci        }, (day: string) => day)
991e41f4b71Sopenharmony_ci      }
992e41f4b71Sopenharmony_ci      .columnsTemplate('1fr 1fr 1fr 1fr 1fr')
993e41f4b71Sopenharmony_ci      .columnsGap(10)
994e41f4b71Sopenharmony_ci      .rowsGap(10)
995e41f4b71Sopenharmony_ci      .scrollBar(BarState.Off)
996e41f4b71Sopenharmony_ci      .width('90%')
997e41f4b71Sopenharmony_ci      .backgroundColor(0xFAEEE0)
998e41f4b71Sopenharmony_ci      .height(300)
999e41f4b71Sopenharmony_ci    }.width('100%').margin({ top: 5 })
1000e41f4b71Sopenharmony_ci  }
1001e41f4b71Sopenharmony_ci}
1002e41f4b71Sopenharmony_ci```
1003e41f4b71Sopenharmony_ci
1004e41f4b71Sopenharmony_ci![gridLayoutOptions](figures/gridLayoutOptions.gif)
1005e41f4b71Sopenharmony_ci
1006e41f4b71Sopenharmony_ci### 示例4
1007e41f4b71Sopenharmony_ci
1008e41f4b71Sopenharmony_cinestedScroll和onScrollFrameBegin的使用。
1009e41f4b71Sopenharmony_ci
1010e41f4b71Sopenharmony_ci```ts
1011e41f4b71Sopenharmony_ci@Entry
1012e41f4b71Sopenharmony_ci@Component
1013e41f4b71Sopenharmony_cistruct GridExample {
1014e41f4b71Sopenharmony_ci  @State colors: number[] = [0xFFC0CB, 0xDA70D6, 0x6B8E23, 0x6A5ACD, 0x00FFFF, 0x00FF7F]
1015e41f4b71Sopenharmony_ci  @State numbers: number[] = []
1016e41f4b71Sopenharmony_ci  @State translateY: number = 0
1017e41f4b71Sopenharmony_ci  private scroller: Scroller = new Scroller()
1018e41f4b71Sopenharmony_ci  private gridScroller: Scroller = new Scroller()
1019e41f4b71Sopenharmony_ci  private touchDown: boolean = false
1020e41f4b71Sopenharmony_ci  private listTouchDown: boolean = false
1021e41f4b71Sopenharmony_ci  private scrolling: boolean = false
1022e41f4b71Sopenharmony_ci
1023e41f4b71Sopenharmony_ci  aboutToAppear() {
1024e41f4b71Sopenharmony_ci    for (let i = 0; i < 100; i++) {
1025e41f4b71Sopenharmony_ci      this.numbers.push(i)
1026e41f4b71Sopenharmony_ci    }
1027e41f4b71Sopenharmony_ci  }
1028e41f4b71Sopenharmony_ci
1029e41f4b71Sopenharmony_ci  build() {
1030e41f4b71Sopenharmony_ci    Stack() {
1031e41f4b71Sopenharmony_ci      Column() {
1032e41f4b71Sopenharmony_ci        Row() {
1033e41f4b71Sopenharmony_ci          Text('Head')
1034e41f4b71Sopenharmony_ci        }
1035e41f4b71Sopenharmony_ci
1036e41f4b71Sopenharmony_ci        Column() {
1037e41f4b71Sopenharmony_ci          List({ scroller: this.scroller }) {
1038e41f4b71Sopenharmony_ci            ListItem() {
1039e41f4b71Sopenharmony_ci              Grid() {
1040e41f4b71Sopenharmony_ci                GridItem() {
1041e41f4b71Sopenharmony_ci                  Text('GoodsTypeList1')
1042e41f4b71Sopenharmony_ci                }
1043e41f4b71Sopenharmony_ci                .backgroundColor(this.colors[0])
1044e41f4b71Sopenharmony_ci                .columnStart(0)
1045e41f4b71Sopenharmony_ci                .columnEnd(1)
1046e41f4b71Sopenharmony_ci
1047e41f4b71Sopenharmony_ci                GridItem() {
1048e41f4b71Sopenharmony_ci                  Text('GoodsTypeList2')
1049e41f4b71Sopenharmony_ci                }
1050e41f4b71Sopenharmony_ci                .backgroundColor(this.colors[1])
1051e41f4b71Sopenharmony_ci                .columnStart(0)
1052e41f4b71Sopenharmony_ci                .columnEnd(1)
1053e41f4b71Sopenharmony_ci
1054e41f4b71Sopenharmony_ci                GridItem() {
1055e41f4b71Sopenharmony_ci                  Text('GoodsTypeList3')
1056e41f4b71Sopenharmony_ci                }
1057e41f4b71Sopenharmony_ci                .backgroundColor(this.colors[2])
1058e41f4b71Sopenharmony_ci                .columnStart(0)
1059e41f4b71Sopenharmony_ci                .columnEnd(1)
1060e41f4b71Sopenharmony_ci
1061e41f4b71Sopenharmony_ci                GridItem() {
1062e41f4b71Sopenharmony_ci                  Text('GoodsTypeList4')
1063e41f4b71Sopenharmony_ci                }
1064e41f4b71Sopenharmony_ci                .backgroundColor(this.colors[3])
1065e41f4b71Sopenharmony_ci                .columnStart(0)
1066e41f4b71Sopenharmony_ci                .columnEnd(1)
1067e41f4b71Sopenharmony_ci
1068e41f4b71Sopenharmony_ci                GridItem() {
1069e41f4b71Sopenharmony_ci                  Text('GoodsTypeList5')
1070e41f4b71Sopenharmony_ci                }
1071e41f4b71Sopenharmony_ci                .backgroundColor(this.colors[4])
1072e41f4b71Sopenharmony_ci                .columnStart(0)
1073e41f4b71Sopenharmony_ci                .columnEnd(1)
1074e41f4b71Sopenharmony_ci              }
1075e41f4b71Sopenharmony_ci              .scrollBar(BarState.Off)
1076e41f4b71Sopenharmony_ci              .columnsGap(15)
1077e41f4b71Sopenharmony_ci              .rowsGap(10)
1078e41f4b71Sopenharmony_ci              .rowsTemplate('1fr 1fr 1fr 1fr 1fr')
1079e41f4b71Sopenharmony_ci              .columnsTemplate('1fr')
1080e41f4b71Sopenharmony_ci              .width('100%')
1081e41f4b71Sopenharmony_ci              .height(200)
1082e41f4b71Sopenharmony_ci            }
1083e41f4b71Sopenharmony_ci
1084e41f4b71Sopenharmony_ci            ListItem() {
1085e41f4b71Sopenharmony_ci              Grid(this.gridScroller) {
1086e41f4b71Sopenharmony_ci                ForEach(this.numbers, (item: number) => {
1087e41f4b71Sopenharmony_ci                  GridItem() {
1088e41f4b71Sopenharmony_ci                    Text(item + '')
1089e41f4b71Sopenharmony_ci                      .fontSize(16)
1090e41f4b71Sopenharmony_ci                      .backgroundColor(0xF9CF93)
1091e41f4b71Sopenharmony_ci                      .width('100%')
1092e41f4b71Sopenharmony_ci                      .height('100%')
1093e41f4b71Sopenharmony_ci                      .textAlign(TextAlign.Center)
1094e41f4b71Sopenharmony_ci                  }
1095e41f4b71Sopenharmony_ci                  .width('100%')
1096e41f4b71Sopenharmony_ci                  .height(40)
1097e41f4b71Sopenharmony_ci                  .shadow({ radius: 10, color: '#909399', offsetX: 1, offsetY: 1 })
1098e41f4b71Sopenharmony_ci                  .borderRadius(10)
1099e41f4b71Sopenharmony_ci                  .translate({ x: 0, y: this.translateY })
1100e41f4b71Sopenharmony_ci                }, (item: string) => item)
1101e41f4b71Sopenharmony_ci              }
1102e41f4b71Sopenharmony_ci              .columnsTemplate('1fr 1fr')
1103e41f4b71Sopenharmony_ci              .friction(0.3)
1104e41f4b71Sopenharmony_ci              .columnsGap(15)
1105e41f4b71Sopenharmony_ci              .rowsGap(10)
1106e41f4b71Sopenharmony_ci              .scrollBar(BarState.Off)
1107e41f4b71Sopenharmony_ci              .width('100%')
1108e41f4b71Sopenharmony_ci              .height('100%')
1109e41f4b71Sopenharmony_ci              .layoutDirection(GridDirection.Column)
1110e41f4b71Sopenharmony_ci              .nestedScroll({
1111e41f4b71Sopenharmony_ci                scrollForward: NestedScrollMode.PARENT_FIRST,
1112e41f4b71Sopenharmony_ci                scrollBackward: NestedScrollMode.SELF_FIRST
1113e41f4b71Sopenharmony_ci              })
1114e41f4b71Sopenharmony_ci              .onTouch((event: TouchEvent) => {
1115e41f4b71Sopenharmony_ci                if (event.type == TouchType.Down) {
1116e41f4b71Sopenharmony_ci                  this.listTouchDown = true
1117e41f4b71Sopenharmony_ci                } else if (event.type == TouchType.Up) {
1118e41f4b71Sopenharmony_ci                  this.listTouchDown = false
1119e41f4b71Sopenharmony_ci                }
1120e41f4b71Sopenharmony_ci              })
1121e41f4b71Sopenharmony_ci            }
1122e41f4b71Sopenharmony_ci          }
1123e41f4b71Sopenharmony_ci          .scrollBar(BarState.Off)
1124e41f4b71Sopenharmony_ci          .edgeEffect(EdgeEffect.None)
1125e41f4b71Sopenharmony_ci          .onTouch((event: TouchEvent) => {
1126e41f4b71Sopenharmony_ci            if (event.type == TouchType.Down) {
1127e41f4b71Sopenharmony_ci              this.touchDown = true
1128e41f4b71Sopenharmony_ci            } else if (event.type == TouchType.Up) {
1129e41f4b71Sopenharmony_ci              this.touchDown = false
1130e41f4b71Sopenharmony_ci            }
1131e41f4b71Sopenharmony_ci          })
1132e41f4b71Sopenharmony_ci          .onScrollFrameBegin((offset: number, state: ScrollState) => {
1133e41f4b71Sopenharmony_ci            if (this.scrolling && offset > 0) {
1134e41f4b71Sopenharmony_ci              let newOffset = this.scroller.currentOffset().yOffset
1135e41f4b71Sopenharmony_ci              if (newOffset >= 590) {
1136e41f4b71Sopenharmony_ci                this.gridScroller.scrollBy(0, offset)
1137e41f4b71Sopenharmony_ci                return { offsetRemain: 0 }
1138e41f4b71Sopenharmony_ci              } else if (newOffset + offset > 590) {
1139e41f4b71Sopenharmony_ci                this.gridScroller.scrollBy(0, newOffset + offset - 590)
1140e41f4b71Sopenharmony_ci                return { offsetRemain: 590 - newOffset }
1141e41f4b71Sopenharmony_ci              }
1142e41f4b71Sopenharmony_ci            }
1143e41f4b71Sopenharmony_ci            return { offsetRemain: offset }
1144e41f4b71Sopenharmony_ci          })
1145e41f4b71Sopenharmony_ci          .onScrollStart(() => {
1146e41f4b71Sopenharmony_ci            if (this.touchDown && !this.listTouchDown) {
1147e41f4b71Sopenharmony_ci              this.scrolling = true
1148e41f4b71Sopenharmony_ci            }
1149e41f4b71Sopenharmony_ci          })
1150e41f4b71Sopenharmony_ci          .onScrollStop(() => {
1151e41f4b71Sopenharmony_ci            this.scrolling = false
1152e41f4b71Sopenharmony_ci          })
1153e41f4b71Sopenharmony_ci        }
1154e41f4b71Sopenharmony_ci        .width('100%')
1155e41f4b71Sopenharmony_ci        .height('100%')
1156e41f4b71Sopenharmony_ci        .padding({ left: 10, right: 10 })
1157e41f4b71Sopenharmony_ci      }
1158e41f4b71Sopenharmony_ci
1159e41f4b71Sopenharmony_ci      Row() {
1160e41f4b71Sopenharmony_ci        Text('Top')
1161e41f4b71Sopenharmony_ci          .width(30)
1162e41f4b71Sopenharmony_ci          .height(30)
1163e41f4b71Sopenharmony_ci          .borderRadius(50)
1164e41f4b71Sopenharmony_ci      }
1165e41f4b71Sopenharmony_ci      .padding(5)
1166e41f4b71Sopenharmony_ci      .borderRadius(50)
1167e41f4b71Sopenharmony_ci      .backgroundColor('#ffffff')
1168e41f4b71Sopenharmony_ci      .shadow({ radius: 10, color: '#909399', offsetX: 1, offsetY: 1 })
1169e41f4b71Sopenharmony_ci      .margin({ right: 22, bottom: 15 })
1170e41f4b71Sopenharmony_ci      .onClick(() => {
1171e41f4b71Sopenharmony_ci        this.scroller.scrollTo({ xOffset: 0, yOffset: 0 })
1172e41f4b71Sopenharmony_ci        this.gridScroller.scrollTo({ xOffset: 0, yOffset: 0 })
1173e41f4b71Sopenharmony_ci      })
1174e41f4b71Sopenharmony_ci    }
1175e41f4b71Sopenharmony_ci    .align(Alignment.BottomEnd)
1176e41f4b71Sopenharmony_ci  }
1177e41f4b71Sopenharmony_ci}
1178e41f4b71Sopenharmony_ci```
1179e41f4b71Sopenharmony_ci
1180e41f4b71Sopenharmony_ci![nestedScrollExample4](figures/nestedScrollExample4.gif)
1181e41f4b71Sopenharmony_ci
1182e41f4b71Sopenharmony_ci### 示例5
1183e41f4b71Sopenharmony_ci
1184e41f4b71Sopenharmony_ci1.  设置属性editMode\(true\)设置Grid是否进入编辑模式,进入编辑模式可以拖拽Grid组件内部GridItem。
1185e41f4b71Sopenharmony_ci2.  在[onItemDragStart](#事件)回调中设置拖拽过程中显示的图片。
1186e41f4b71Sopenharmony_ci3.  在[onItemDrop](#事件)中获取拖拽起始位置,和拖拽插入位置,并在[onItemDrop](#事件)中完成交换数组位置逻辑。
1187e41f4b71Sopenharmony_ci
1188e41f4b71Sopenharmony_ci> **说明:** 
1189e41f4b71Sopenharmony_ci>
1190e41f4b71Sopenharmony_ci> 预览器窗口不支持显示拖拽跟手。
1191e41f4b71Sopenharmony_ci
1192e41f4b71Sopenharmony_ci```ts
1193e41f4b71Sopenharmony_ci@Entry
1194e41f4b71Sopenharmony_ci@Component
1195e41f4b71Sopenharmony_cistruct GridExample {
1196e41f4b71Sopenharmony_ci  @State numbers: string[] = []
1197e41f4b71Sopenharmony_ci  scroller: Scroller = new Scroller()
1198e41f4b71Sopenharmony_ci  @State text: string = 'drag'
1199e41f4b71Sopenharmony_ci
1200e41f4b71Sopenharmony_ci  @Builder pixelMapBuilder() { //拖拽过程样式
1201e41f4b71Sopenharmony_ci    Column() {
1202e41f4b71Sopenharmony_ci      Text(this.text)
1203e41f4b71Sopenharmony_ci        .fontSize(16)
1204e41f4b71Sopenharmony_ci        .backgroundColor(0xF9CF93)
1205e41f4b71Sopenharmony_ci        .width(80)
1206e41f4b71Sopenharmony_ci        .height(80)
1207e41f4b71Sopenharmony_ci        .textAlign(TextAlign.Center)
1208e41f4b71Sopenharmony_ci    }
1209e41f4b71Sopenharmony_ci  }
1210e41f4b71Sopenharmony_ci
1211e41f4b71Sopenharmony_ci  aboutToAppear() {
1212e41f4b71Sopenharmony_ci    for (let i = 1;i <= 15; i++) {
1213e41f4b71Sopenharmony_ci      this.numbers.push(i + '')
1214e41f4b71Sopenharmony_ci    }
1215e41f4b71Sopenharmony_ci  }
1216e41f4b71Sopenharmony_ci
1217e41f4b71Sopenharmony_ci  changeIndex(index1: number, index2: number) { //交换数组位置
1218e41f4b71Sopenharmony_ci    let temp: string;
1219e41f4b71Sopenharmony_ci    temp = this.numbers[index1];
1220e41f4b71Sopenharmony_ci    this.numbers[index1] = this.numbers[index2];
1221e41f4b71Sopenharmony_ci    this.numbers[index2] = temp;
1222e41f4b71Sopenharmony_ci  }
1223e41f4b71Sopenharmony_ci
1224e41f4b71Sopenharmony_ci  build() {
1225e41f4b71Sopenharmony_ci    Column({ space: 5 }) {
1226e41f4b71Sopenharmony_ci      Grid(this.scroller) {
1227e41f4b71Sopenharmony_ci        ForEach(this.numbers, (day: string) => {
1228e41f4b71Sopenharmony_ci          GridItem() {
1229e41f4b71Sopenharmony_ci            Text(day)
1230e41f4b71Sopenharmony_ci              .fontSize(16)
1231e41f4b71Sopenharmony_ci              .backgroundColor(0xF9CF93)
1232e41f4b71Sopenharmony_ci              .width(80)
1233e41f4b71Sopenharmony_ci              .height(80)
1234e41f4b71Sopenharmony_ci              .textAlign(TextAlign.Center)
1235e41f4b71Sopenharmony_ci          }
1236e41f4b71Sopenharmony_ci        })
1237e41f4b71Sopenharmony_ci      }
1238e41f4b71Sopenharmony_ci      .columnsTemplate('1fr 1fr 1fr')
1239e41f4b71Sopenharmony_ci      .columnsGap(10)
1240e41f4b71Sopenharmony_ci      .rowsGap(10)
1241e41f4b71Sopenharmony_ci      .width('90%')
1242e41f4b71Sopenharmony_ci      .backgroundColor(0xFAEEE0)
1243e41f4b71Sopenharmony_ci      .height(300)
1244e41f4b71Sopenharmony_ci      .editMode(true) //设置Grid是否进入编辑模式,进入编辑模式可以拖拽Grid组件内部GridItem
1245e41f4b71Sopenharmony_ci      .onItemDragStart((event: ItemDragInfo, itemIndex: number) => { //第一次拖拽此事件绑定的组件时,触发回调。
1246e41f4b71Sopenharmony_ci        this.text = this.numbers[itemIndex]
1247e41f4b71Sopenharmony_ci        return this.pixelMapBuilder() //设置拖拽过程中显示的图片。
1248e41f4b71Sopenharmony_ci      })
1249e41f4b71Sopenharmony_ci      .onItemDrop((event: ItemDragInfo, itemIndex: number, insertIndex: number, isSuccess: boolean) => { //绑定此事件的组件可作为拖拽释放目标,当在本组件范围内停止拖拽行为时,触发回调。
1250e41f4b71Sopenharmony_ci        // isSuccess=false时,说明drop的位置在grid外部;insertIndex > length时,说明有新增元素的事件发生
1251e41f4b71Sopenharmony_ci        if (!isSuccess || insertIndex >= this.numbers.length) {
1252e41f4b71Sopenharmony_ci          return
1253e41f4b71Sopenharmony_ci        }
1254e41f4b71Sopenharmony_ci        console.info('beixiang' + itemIndex + '', insertIndex + '') //itemIndex拖拽起始位置,insertIndex拖拽插入位置
1255e41f4b71Sopenharmony_ci        this.changeIndex(itemIndex, insertIndex)
1256e41f4b71Sopenharmony_ci      })
1257e41f4b71Sopenharmony_ci    }.width('100%').margin({ top: 5 })
1258e41f4b71Sopenharmony_ci  }
1259e41f4b71Sopenharmony_ci}
1260e41f4b71Sopenharmony_ci```
1261e41f4b71Sopenharmony_ci
1262e41f4b71Sopenharmony_ci示例图:
1263e41f4b71Sopenharmony_ci
1264e41f4b71Sopenharmony_ci网格子组件开始拖拽:
1265e41f4b71Sopenharmony_ci
1266e41f4b71Sopenharmony_ci![gridDrag](figures/gridDrag.png)
1267e41f4b71Sopenharmony_ci
1268e41f4b71Sopenharmony_ci网格子组件拖拽过程中:
1269e41f4b71Sopenharmony_ci
1270e41f4b71Sopenharmony_ci![gridDrag](figures/gridDrag1.png)
1271e41f4b71Sopenharmony_ci
1272e41f4b71Sopenharmony_ci网格子组件1与子组件6拖拽交换位置后:
1273e41f4b71Sopenharmony_ci
1274e41f4b71Sopenharmony_ci![gridDrag](figures/gridDrag2.png)
1275e41f4b71Sopenharmony_ci
1276e41f4b71Sopenharmony_ci### 示例6
1277e41f4b71Sopenharmony_ci
1278e41f4b71Sopenharmony_cilayoutDirection、maxcount、minCount、cellLength的使用。
1279e41f4b71Sopenharmony_ci
1280e41f4b71Sopenharmony_ci```ts
1281e41f4b71Sopenharmony_ci@Entry
1282e41f4b71Sopenharmony_ci@Component
1283e41f4b71Sopenharmony_cistruct GridExample {
1284e41f4b71Sopenharmony_ci  @State numbers: string[] = []
1285e41f4b71Sopenharmony_ci
1286e41f4b71Sopenharmony_ci  aboutToAppear() {
1287e41f4b71Sopenharmony_ci    for (let i = 1; i <= 30; i++) {
1288e41f4b71Sopenharmony_ci      this.numbers.push(i + '')
1289e41f4b71Sopenharmony_ci    }
1290e41f4b71Sopenharmony_ci  }
1291e41f4b71Sopenharmony_ci
1292e41f4b71Sopenharmony_ci  build() {
1293e41f4b71Sopenharmony_ci    Scroll() {
1294e41f4b71Sopenharmony_ci      Column({ space: 5 }) {
1295e41f4b71Sopenharmony_ci        Blank()
1296e41f4b71Sopenharmony_ci        Text('rowsTemplate、columnsTemplate都不设置layoutDirection、maxcount、minCount、cellLength才生效')
1297e41f4b71Sopenharmony_ci          .fontSize(15).fontColor(0xCCCCCC).width('90%')
1298e41f4b71Sopenharmony_ci        Grid() {
1299e41f4b71Sopenharmony_ci          ForEach(this.numbers, (day: string) => {
1300e41f4b71Sopenharmony_ci            GridItem() {
1301e41f4b71Sopenharmony_ci              Text(day).fontSize(16).backgroundColor(0xF9CF93)
1302e41f4b71Sopenharmony_ci            }.width(40).height(80).borderWidth(2).borderColor(Color.Red)
1303e41f4b71Sopenharmony_ci          }, (day: string) => day)
1304e41f4b71Sopenharmony_ci        }
1305e41f4b71Sopenharmony_ci        .height(300)
1306e41f4b71Sopenharmony_ci        .columnsGap(10)
1307e41f4b71Sopenharmony_ci        .rowsGap(10)
1308e41f4b71Sopenharmony_ci        .backgroundColor(0xFAEEE0)
1309e41f4b71Sopenharmony_ci        .maxCount(6)
1310e41f4b71Sopenharmony_ci        .minCount(2)
1311e41f4b71Sopenharmony_ci        .cellLength(0)
1312e41f4b71Sopenharmony_ci        .layoutDirection(GridDirection.Row)
1313e41f4b71Sopenharmony_ci      }
1314e41f4b71Sopenharmony_ci      .width('90%').margin({ top: 5, left: 5, right: 5 })
1315e41f4b71Sopenharmony_ci      .align(Alignment.Center)
1316e41f4b71Sopenharmony_ci    }
1317e41f4b71Sopenharmony_ci  }
1318e41f4b71Sopenharmony_ci}
1319e41f4b71Sopenharmony_ci```
1320e41f4b71Sopenharmony_ci
1321e41f4b71Sopenharmony_ci![cellLength](figures/cellLength.gif)
1322e41f4b71Sopenharmony_ci
1323e41f4b71Sopenharmony_ci### 示例7
1324e41f4b71Sopenharmony_ci
1325e41f4b71Sopenharmony_ci双指缩放修改Grid列数。
1326e41f4b71Sopenharmony_ci
1327e41f4b71Sopenharmony_ci```ts
1328e41f4b71Sopenharmony_ci// xxx.ets
1329e41f4b71Sopenharmony_ci@Entry
1330e41f4b71Sopenharmony_ci@Component
1331e41f4b71Sopenharmony_cistruct GridExample {
1332e41f4b71Sopenharmony_ci  @State numbers: String[] = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19']
1333e41f4b71Sopenharmony_ci  @State columns: number = 2
1334e41f4b71Sopenharmony_ci
1335e41f4b71Sopenharmony_ci  aboutToAppear() {
1336e41f4b71Sopenharmony_ci    let lastCount = AppStorage.get<number>('columnsCount')
1337e41f4b71Sopenharmony_ci    if (typeof lastCount != 'undefined') {
1338e41f4b71Sopenharmony_ci      this.columns = lastCount
1339e41f4b71Sopenharmony_ci    }
1340e41f4b71Sopenharmony_ci  }
1341e41f4b71Sopenharmony_ci
1342e41f4b71Sopenharmony_ci  build() {
1343e41f4b71Sopenharmony_ci    Column({ space: 5 }) {
1344e41f4b71Sopenharmony_ci      Row() {
1345e41f4b71Sopenharmony_ci        Text('双指缩放改变列数')
1346e41f4b71Sopenharmony_ci          .height('5%')
1347e41f4b71Sopenharmony_ci          .margin({ top: 10, left: 20 })
1348e41f4b71Sopenharmony_ci      }
1349e41f4b71Sopenharmony_ci
1350e41f4b71Sopenharmony_ci      Grid() {
1351e41f4b71Sopenharmony_ci        ForEach(this.numbers, (day: string) => {
1352e41f4b71Sopenharmony_ci          ForEach(this.numbers, (day: string) => {
1353e41f4b71Sopenharmony_ci            GridItem() {
1354e41f4b71Sopenharmony_ci              Text(day)
1355e41f4b71Sopenharmony_ci                .fontSize(16)
1356e41f4b71Sopenharmony_ci                .backgroundColor(0xF9CF93)
1357e41f4b71Sopenharmony_ci                .width('100%')
1358e41f4b71Sopenharmony_ci                .height(80)
1359e41f4b71Sopenharmony_ci                .textAlign(TextAlign.Center)
1360e41f4b71Sopenharmony_ci            }
1361e41f4b71Sopenharmony_ci          }, (day: string) => day)
1362e41f4b71Sopenharmony_ci        }, (day: string) => day)
1363e41f4b71Sopenharmony_ci      }
1364e41f4b71Sopenharmony_ci      .columnsTemplate('1fr '.repeat(this.columns))
1365e41f4b71Sopenharmony_ci      .columnsGap(10)
1366e41f4b71Sopenharmony_ci      .rowsGap(10)
1367e41f4b71Sopenharmony_ci      .width('90%')
1368e41f4b71Sopenharmony_ci      .scrollBar(BarState.Off)
1369e41f4b71Sopenharmony_ci      .backgroundColor(0xFAEEE0)
1370e41f4b71Sopenharmony_ci      .height('100%')
1371e41f4b71Sopenharmony_ci      .cachedCount(3)
1372e41f4b71Sopenharmony_ci      // 切换列数item位置重排动画
1373e41f4b71Sopenharmony_ci      .animation({
1374e41f4b71Sopenharmony_ci        duration: 300,
1375e41f4b71Sopenharmony_ci        curve: Curve.Smooth
1376e41f4b71Sopenharmony_ci      })
1377e41f4b71Sopenharmony_ci      .priorityGesture(
1378e41f4b71Sopenharmony_ci        PinchGesture()
1379e41f4b71Sopenharmony_ci          .onActionEnd((event: GestureEvent) => {
1380e41f4b71Sopenharmony_ci            console.info('end scale:' + event.scale)
1381e41f4b71Sopenharmony_ci            // 手指分开,减少列数以放大Item,触发阈值可以自定义,示例为2
1382e41f4b71Sopenharmony_ci            if (event.scale > 2) {
1383e41f4b71Sopenharmony_ci              this.columns--
1384e41f4b71Sopenharmony_ci            } else if (event.scale < 0.6) {
1385e41f4b71Sopenharmony_ci              this.columns++
1386e41f4b71Sopenharmony_ci            }
1387e41f4b71Sopenharmony_ci            // 可以根据设备屏幕宽度设定最大和最小列数,此处以最小1列最大4列为例
1388e41f4b71Sopenharmony_ci            this.columns = Math.min(4, Math.max(1, this.columns));
1389e41f4b71Sopenharmony_ci            AppStorage.setOrCreate<number>('columnsCount', this.columns)
1390e41f4b71Sopenharmony_ci          })
1391e41f4b71Sopenharmony_ci      )
1392e41f4b71Sopenharmony_ci    }.width('100%').margin({ top: 5 })
1393e41f4b71Sopenharmony_ci  }
1394e41f4b71Sopenharmony_ci}
1395e41f4b71Sopenharmony_ci```
1396e41f4b71Sopenharmony_ci
1397e41f4b71Sopenharmony_ci![pinch](figures/grid-pinch.gif)
1398e41f4b71Sopenharmony_ci
1399e41f4b71Sopenharmony_ci### 示例8
1400e41f4b71Sopenharmony_ci属性[columnsTemplate](#columnstemplate)中auto-fill、auto-fit和auto-stretch的使用示例
1401e41f4b71Sopenharmony_ci
1402e41f4b71Sopenharmony_ci```ts
1403e41f4b71Sopenharmony_ci@Entry
1404e41f4b71Sopenharmony_ci@Component
1405e41f4b71Sopenharmony_cistruct GridColumnsTemplate {
1406e41f4b71Sopenharmony_ci  data: number[] = [0, 1, 2, 3, 4, 5]
1407e41f4b71Sopenharmony_ci  data1: number[] = [0, 1, 2, 3, 4, 5]
1408e41f4b71Sopenharmony_ci  data2: number[] = [0, 1, 2, 3, 4, 5]
1409e41f4b71Sopenharmony_ci
1410e41f4b71Sopenharmony_ci  build() {
1411e41f4b71Sopenharmony_ci    Column({ space: 10 }) {
1412e41f4b71Sopenharmony_ci      Text('auto-fill 根据设定的列宽自动计算列数').width('90%')
1413e41f4b71Sopenharmony_ci      Grid() {
1414e41f4b71Sopenharmony_ci        ForEach(this.data, (item: number) => {
1415e41f4b71Sopenharmony_ci          GridItem() {
1416e41f4b71Sopenharmony_ci            Text('N' + item).height(80)
1417e41f4b71Sopenharmony_ci          }
1418e41f4b71Sopenharmony_ci          .backgroundColor(Color.Orange)
1419e41f4b71Sopenharmony_ci        })
1420e41f4b71Sopenharmony_ci      }
1421e41f4b71Sopenharmony_ci      .width('90%')
1422e41f4b71Sopenharmony_ci      .border({ width: 1, color: Color.Black })
1423e41f4b71Sopenharmony_ci      .columnsTemplate('repeat(auto-fill, 70)')
1424e41f4b71Sopenharmony_ci      .columnsGap(10)
1425e41f4b71Sopenharmony_ci      .rowsGap(10)
1426e41f4b71Sopenharmony_ci      .height(150)
1427e41f4b71Sopenharmony_ci
1428e41f4b71Sopenharmony_ci      Text('auto-fit 先根据设定的列宽计算列数,余下的空间会均分到每一列中').width('90%')
1429e41f4b71Sopenharmony_ci      Grid() {
1430e41f4b71Sopenharmony_ci        ForEach(this.data1, (item: number) => {
1431e41f4b71Sopenharmony_ci          GridItem() {
1432e41f4b71Sopenharmony_ci            Text('N' + item).height(80)
1433e41f4b71Sopenharmony_ci          }
1434e41f4b71Sopenharmony_ci          .backgroundColor(Color.Orange)
1435e41f4b71Sopenharmony_ci        })
1436e41f4b71Sopenharmony_ci      }
1437e41f4b71Sopenharmony_ci      .width('90%')
1438e41f4b71Sopenharmony_ci      .border({ width: 1, color: Color.Black })
1439e41f4b71Sopenharmony_ci      .columnsTemplate('repeat(auto-fit, 70)')
1440e41f4b71Sopenharmony_ci      .columnsGap(10)
1441e41f4b71Sopenharmony_ci      .rowsGap(10)
1442e41f4b71Sopenharmony_ci      .height(150)
1443e41f4b71Sopenharmony_ci
1444e41f4b71Sopenharmony_ci      Text('auto-stretch 先根据设定的列宽计算列数,余下的空间会均分到每个列间距中').width('90%')
1445e41f4b71Sopenharmony_ci      Grid() {
1446e41f4b71Sopenharmony_ci        ForEach(this.data2, (item: number) => {
1447e41f4b71Sopenharmony_ci          GridItem() {
1448e41f4b71Sopenharmony_ci            Text('N' + item).height(80)
1449e41f4b71Sopenharmony_ci          }
1450e41f4b71Sopenharmony_ci          .backgroundColor(Color.Orange)
1451e41f4b71Sopenharmony_ci        })
1452e41f4b71Sopenharmony_ci      }
1453e41f4b71Sopenharmony_ci      .width('90%')
1454e41f4b71Sopenharmony_ci      .border({ width: 1, color: Color.Black })
1455e41f4b71Sopenharmony_ci      .columnsTemplate('repeat(auto-stretch, 70)')
1456e41f4b71Sopenharmony_ci      .columnsGap(10)
1457e41f4b71Sopenharmony_ci      .rowsGap(10)
1458e41f4b71Sopenharmony_ci      .height(150)
1459e41f4b71Sopenharmony_ci    }
1460e41f4b71Sopenharmony_ci    .width('100%')
1461e41f4b71Sopenharmony_ci    .height('100%')
1462e41f4b71Sopenharmony_ci  }
1463e41f4b71Sopenharmony_ci}
1464e41f4b71Sopenharmony_ci```
1465e41f4b71Sopenharmony_ci
1466e41f4b71Sopenharmony_ci![gridColumnsTemplate](figures/gridColumnsTemplate.png)
1467e41f4b71Sopenharmony_ci
1468e41f4b71Sopenharmony_ci### 示例9
1469e41f4b71Sopenharmony_ci下面的Grid中包含两列,每列中的GridItem包括高度确定的两个Column和一个高度不确定的Text共三个子组件。
1470e41f4b71Sopenharmony_ci
1471e41f4b71Sopenharmony_ci在默认情况下,左右两个GridItem的高度可能是不同的;在设置了Grid的[alignItems](#alignitems12)属性为GridItemAlignment.STRETCH后,一行左右两个GridItem中原本高度较小的GridItem会以另一个高度较大的GridItem的高度作为自己的高度。
1472e41f4b71Sopenharmony_ci
1473e41f4b71Sopenharmony_ci```ts
1474e41f4b71Sopenharmony_ci@Entry
1475e41f4b71Sopenharmony_ci@Component
1476e41f4b71Sopenharmony_cistruct Index {
1477e41f4b71Sopenharmony_ci  @State data: number[] = [];
1478e41f4b71Sopenharmony_ci  @State items: number[] = [];
1479e41f4b71Sopenharmony_ci
1480e41f4b71Sopenharmony_ci  aboutToAppear(): void {
1481e41f4b71Sopenharmony_ci    for (let i = 0; i < 100; i++) {
1482e41f4b71Sopenharmony_ci      this.data.push(i)
1483e41f4b71Sopenharmony_ci      this.items.push(this.getSize())
1484e41f4b71Sopenharmony_ci    }
1485e41f4b71Sopenharmony_ci  }
1486e41f4b71Sopenharmony_ci
1487e41f4b71Sopenharmony_ci  getSize() {
1488e41f4b71Sopenharmony_ci    let ret = Math.floor(Math.random() * 5)
1489e41f4b71Sopenharmony_ci    return Math.max(1, ret)
1490e41f4b71Sopenharmony_ci  }
1491e41f4b71Sopenharmony_ci
1492e41f4b71Sopenharmony_ci  build() {
1493e41f4b71Sopenharmony_ci    Column({ space: 10 }) {
1494e41f4b71Sopenharmony_ci      Text('Grid alignItems示例代码')
1495e41f4b71Sopenharmony_ci
1496e41f4b71Sopenharmony_ci      Grid() {
1497e41f4b71Sopenharmony_ci        ForEach(this.data, (item: number) => {
1498e41f4b71Sopenharmony_ci          // GridItem和Column不设置高度,默认会自适应子组件大小,设置STRETCH的场景下,会变成与当前行最高节点同高。
1499e41f4b71Sopenharmony_ci          // 若设置高度,则会保持已设置的高度,不会与当前行最高节点同高。
1500e41f4b71Sopenharmony_ci          GridItem() {
1501e41f4b71Sopenharmony_ci            Column() {
1502e41f4b71Sopenharmony_ci              Column().height(100).backgroundColor('#D5D5D5').width('100%')
1503e41f4b71Sopenharmony_ci              // 中间的Text设置flexGrow(1)来自适应填满父组件的空缺
1504e41f4b71Sopenharmony_ci              Text('这是一段文字。'.repeat(this.items[item]))
1505e41f4b71Sopenharmony_ci                .flexGrow(1).width('100%').align(Alignment.TopStart)
1506e41f4b71Sopenharmony_ci                .backgroundColor('#F7F7F7')
1507e41f4b71Sopenharmony_ci              Column().height(50).backgroundColor('#707070').width('100%')
1508e41f4b71Sopenharmony_ci            }
1509e41f4b71Sopenharmony_ci          }
1510e41f4b71Sopenharmony_ci          .border({ color: Color.Black, width: 1 })
1511e41f4b71Sopenharmony_ci        })
1512e41f4b71Sopenharmony_ci      }
1513e41f4b71Sopenharmony_ci      .columnsGap(10)
1514e41f4b71Sopenharmony_ci      .rowsGap(5)
1515e41f4b71Sopenharmony_ci      .columnsTemplate('1fr 1fr')
1516e41f4b71Sopenharmony_ci      .width('80%')
1517e41f4b71Sopenharmony_ci      .height('100%')
1518e41f4b71Sopenharmony_ci      // Grid设置alignItems为STRETCH,以当前行最高的GridItem的高度为其他GridItem的高度。
1519e41f4b71Sopenharmony_ci      .alignItems(GridItemAlignment.STRETCH)
1520e41f4b71Sopenharmony_ci      .scrollBar(BarState.Off)
1521e41f4b71Sopenharmony_ci    }
1522e41f4b71Sopenharmony_ci    .height('100%')
1523e41f4b71Sopenharmony_ci    .width('100%')
1524e41f4b71Sopenharmony_ci  }
1525e41f4b71Sopenharmony_ci}
1526e41f4b71Sopenharmony_ci
1527e41f4b71Sopenharmony_ci```
1528e41f4b71Sopenharmony_ci![gridAlignItems](figures/gridAlignItems.png)
1529e41f4b71Sopenharmony_ci
1530e41f4b71Sopenharmony_ci### 示例10
1531e41f4b71Sopenharmony_ci
1532e41f4b71Sopenharmony_ci```ts
1533e41f4b71Sopenharmony_ci// xxx.ets
1534e41f4b71Sopenharmony_ci//该示例实现了Grid组件开启边缘渐隐效果并设置边缘渐隐长度
1535e41f4b71Sopenharmony_ciimport { LengthMetrics } from '@kit.ArkUI'
1536e41f4b71Sopenharmony_ci@Entry
1537e41f4b71Sopenharmony_ci@Component
1538e41f4b71Sopenharmony_cistruct GridExample {
1539e41f4b71Sopenharmony_ci  @State numbers: String[] = ['0', '1', '2', '3', '4']
1540e41f4b71Sopenharmony_ci  @State rowNumbers: String[] = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
1541e41f4b71Sopenharmony_ci  scroller: Scroller = new Scroller()
1542e41f4b71Sopenharmony_ci
1543e41f4b71Sopenharmony_ci  build() {
1544e41f4b71Sopenharmony_ci    Column({ space: 5 }) {
1545e41f4b71Sopenharmony_ci      Text('scroll').fontColor(0xCCCCCC).fontSize(9).width('90%')
1546e41f4b71Sopenharmony_ci      Grid(this.scroller) {
1547e41f4b71Sopenharmony_ci        ForEach(this.rowNumbers, (day: string) => {
1548e41f4b71Sopenharmony_ci          ForEach(this.numbers, (day: string) => {
1549e41f4b71Sopenharmony_ci            GridItem() {
1550e41f4b71Sopenharmony_ci              Text(day)
1551e41f4b71Sopenharmony_ci                .fontSize(16)
1552e41f4b71Sopenharmony_ci                .backgroundColor(0xF9CF93)
1553e41f4b71Sopenharmony_ci                .width('100%')
1554e41f4b71Sopenharmony_ci                .height(80)
1555e41f4b71Sopenharmony_ci                .textAlign(TextAlign.Center)
1556e41f4b71Sopenharmony_ci            }
1557e41f4b71Sopenharmony_ci          }, (day: string) => day)
1558e41f4b71Sopenharmony_ci        }, (day: string) => day)
1559e41f4b71Sopenharmony_ci      }
1560e41f4b71Sopenharmony_ci      .columnsTemplate('1fr 1fr 1fr 1fr 1fr')
1561e41f4b71Sopenharmony_ci      .columnsGap(10)
1562e41f4b71Sopenharmony_ci      .rowsGap(20)
1563e41f4b71Sopenharmony_ci      .height('90%')
1564e41f4b71Sopenharmony_ci      .fadingEdge(true,{fadingEdgeLength:LengthMetrics.vp(80)})
1565e41f4b71Sopenharmony_ci
1566e41f4b71Sopenharmony_ci    }.width('100%').margin({ top: 5 })
1567e41f4b71Sopenharmony_ci  }
1568e41f4b71Sopenharmony_ci}
1569e41f4b71Sopenharmony_ci```
1570e41f4b71Sopenharmony_ci
1571e41f4b71Sopenharmony_ci![fadingEdge_grid](figures/fadingEdge_grid.gif)