1# GridItem
2
3网格容器中单项内容容器。
4
5>  **说明:**
6>
7>  * 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8>  * 仅支持作为[Grid](ts-container-grid.md)组件的子组件使用。
9>  * 当GridItem配合LazyForEach使用时,GridItem子组件在GridItem创建时创建。配合if/else、ForEach使用时,或父组件为Grid时,GridItem子组件在GridItem布局时创建。
10
11
12## 子组件
13
14可以包含单个子组件。
15
16## 接口
17
18GridItem(value?: GridItemOptions)
19
20**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
21
22**系统能力:** SystemCapability.ArkUI.ArkUI.Full
23
24**参数:**
25
26| 参数名 | 类型                                      | 必填 | 说明                                                     |
27| ------ | --------------------------------------------- | ---- | ------------------------------------------------------------ |
28| value<sup>11+</sup>  | [GridItemOptions](#griditemoptions11对象说明) | 否   | 为GridItem提供可选参数, 该对象内含有[GridItemStyle](#griditemstyle11枚举说明)枚举类型的style参数。 |
29
30## 属性
31
32### rowStart
33
34rowStart(value: number)
35
36设置当前元素起始行号。
37
38**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
39
40**系统能力:** SystemCapability.ArkUI.ArkUI.Full
41
42**参数:**
43
44| 参数名 | 类型   | 必填 | 说明               |
45| ------ | ------ | ---- | ------------------ |
46| value  | number | 是   | 当前元素起始行号。<br/>需要指定GridItem起始行列号和所占行列数的场景推荐使用[Grid的layoutOptions参数](ts-container-grid.md#gridlayoutoptions10),详细可参考[Grid的示例1](ts-container-grid.md#示例1固定行列grid)和[Grid的示例3](ts-container-grid.md#示例3可滚动grid设置跨行跨列节点)。 |
47
48### rowEnd
49
50rowEnd(value: number)
51
52设置当前元素终点行号。
53
54**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
55
56**系统能力:** SystemCapability.ArkUI.ArkUI.Full
57
58**参数:**
59
60| 参数名 | 类型   | 必填 | 说明               |
61| ------ | ------ | ---- | ------------------ |
62| value  | number | 是   | 当前元素终点行号。<br/>需要指定GridItem起始行列号和所占行列数的场景推荐使用[Grid的layoutOptions参数](ts-container-grid.md#gridlayoutoptions10),详细可参考[Grid的示例1](ts-container-grid.md#示例1固定行列grid)和[Grid的示例3](ts-container-grid.md#示例3可滚动grid设置跨行跨列节点)。 |
63
64### columnStart
65
66columnStart(value: number)
67
68设置当前元素起始列号。
69
70**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
71
72**系统能力:** SystemCapability.ArkUI.ArkUI.Full
73
74**参数:**
75
76| 参数名 | 类型   | 必填 | 说明               |
77| ------ | ------ | ---- | ------------------ |
78| value  | number | 是   | 当前元素起始列号。<br/>需要指定GridItem起始行列号和所占行列数的场景推荐使用[Grid的layoutOptions参数](ts-container-grid.md#gridlayoutoptions10),详细可参考[Grid的示例1](ts-container-grid.md#示例1固定行列grid)和[Grid的示例3](ts-container-grid.md#示例3可滚动grid设置跨行跨列节点)。 |
79
80### columnEnd
81
82columnEnd(value: number)
83
84设置当前元素终点列号。
85
86**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
87
88**系统能力:** SystemCapability.ArkUI.ArkUI.Full
89
90**参数:**
91
92| 参数名 | 类型   | 必填 | 说明               |
93| ------ | ------ | ---- | ------------------ |
94| value  | number | 是   | 当前元素终点列号。<br/>需要指定GridItem起始行列号和所占行列数的场景推荐使用[Grid的layoutOptions参数](ts-container-grid.md#gridlayoutoptions10),详细可参考[Grid的示例1](ts-container-grid.md#示例1固定行列grid)和[Grid的示例3](ts-container-grid.md#示例3可滚动grid设置跨行跨列节点)。 |
95
96>  **说明:**
97>
98>  需要指定GridItem起始行列号和所占行列数的场景推荐使用[Grid的layoutOptions参数](ts-container-grid.md#gridlayoutoptions10),详细可参考[Grid的示例1](ts-container-grid.md#示例1固定行列grid)和[Grid的示例3](ts-container-grid.md#示例3可滚动grid设置跨行跨列节点)。
99>
100>  起始行号、终点行号、起始列号、终点列号生效规则如下:
101>
102>  rowStart/rowEnd合理取值范围为0\~总行数-1,columnStart/columnEnd合理取值范围为0\~总列数-1。
103>
104>  如果设置了rowStart/rowEnd/columnStart/columnEnd,GridItem会占据指定的行数(rowEnd-rowStart+1)或列数(columnEnd-columnStart+1)。
105>
106>  只有在设置columnTemplate和rowTemplate的Grid中,设置合理的rowStart/rowEnd/columnStart/columnEnd四个属性的GridItem才能按照指定的行列号布局。
107>
108>  在设置columnTemplate和rowTemplate的Grid中,单独设置行号rowStart/rowEnd或列号columnStart/columnEnd的GridItem会按照一行一列进行布局。
109>
110>  在只设置columnTemplate的Grid中设置列号columnStart/columnEnd的GridItem按照列数布局。在该区域位置存在GridItem布局,则直接换行进行放置。
111>
112>  在只设置rowTemplate的Grid中设置行号rowStart/rowEnd的GridItem按照行数布局。在该区域位置存在GridItem布局,则直接换列进行放置。
113>
114>  在只设置columnTemplate的Grid中,在GridItem上设置了不合理的值,GridItem按照一行一列进行布局。
115>
116>  columnTemplate和rowTemplate都不设置的Grid中GridItem的行列号属性无效。
117
118### forceRebuild<sup>(deprecated)</sup>
119
120forceRebuild(value: boolean)
121
122设置在触发组件build时是否重新创建此节点。GridItem会根据自身属性和子组件变化自行决定是否需要重新创建,无需设置。
123
124从API version9开始废弃。
125
126**系统能力:** SystemCapability.ArkUI.ArkUI.Full
127
128**参数:**
129
130| 参数名 | 类型    | 必填 | 说明                                                    |
131| ------ | ------- | ---- | ------------------------------------------------------- |
132| value  | boolean | 是   | 在触发组件build时是否重新创建此节点。<br/>默认值:false |
133
134### selectable<sup>8+</sup>
135
136selectable(value: boolean)
137
138设置当前GridItem元素是否可以被鼠标框选。外层Grid容器的鼠标框选开启时,GridItem的框选才生效。
139
140该属性需要在设置[选中态样式](./ts-universal-attributes-polymorphic-style.md#statestyles接口说明)前使用才能生效选中态样式。
141
142**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
143
144**系统能力:** SystemCapability.ArkUI.ArkUI.Full
145
146**参数:**
147
148| 参数名 | 类型    | 必填 | 说明                                                  |
149| ------ | ------- | ---- | ----------------------------------------------------- |
150| value  | boolean | 是   | 当前GridItem元素是否可以被鼠标框选。<br/>默认值:true |
151
152### selected<sup>10+</sup>
153
154selected(value: boolean)
155
156设置当前GridItem选中状态。该属性支持[$$](../../../quick-start/arkts-two-way-sync.md)双向绑定变量。
157
158该属性需要在设置[选中态样式](./ts-universal-attributes-polymorphic-style.md#statestyles接口说明)前使用才能生效选中态样式。
159
160**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
161
162**系统能力:** SystemCapability.ArkUI.ArkUI.Full
163
164**参数:**
165
166| 参数名 | 类型    | 必填 | 说明                                     |
167| ------ | ------- | ---- | ---------------------------------------- |
168| value  | boolean | 是   | 当前GridItem选中状态。<br/>默认值:false |
169
170## GridItemOptions<sup>11+</sup>对象说明
171
172**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
173
174**系统能力:** SystemCapability.ArkUI.ArkUI.Full
175
176| 名称  | 类型                  | 必填 | 说明                         |
177| ----- | -------------------- | ---- | ---------------------------- |
178| style | [GridItemStyle](#griditemstyle11枚举说明) | 否   | 设置GridItem样式。<br/>默认值: GridItemStyle.NONE<br/>设置为GridItemStyle.NONE时无样式。<br/>设置为GridItemStyle.PLAIN时,显示Hover、Press态样式。 |
179
180## GridItemStyle<sup>11+</sup>枚举说明
181
182**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
183
184**系统能力:** SystemCapability.ArkUI.ArkUI.Full
185
186| 名称  |值| 说明                   |
187| ----- |----| ------------------------ |
188| NONE  |  0 | 无样式。                 |
189| PLAIN |  1 | 显示Hover、Press态样式。 |
190
191> **说明:**
192>
193> GridItem焦点态样式设置:Grid组件需要设置4vp规格以上的内边距,用于显示GridItem的焦点框。
194
195## 事件
196
197### onSelect<sup>8+</sup>
198
199onSelect(event:&nbsp;(isSelected:&nbsp;boolean)&nbsp;=&gt;&nbsp;void)
200
201GridItem元素被鼠标框选的状态改变时触发回调。
202
203**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
204
205**系统能力:** SystemCapability.ArkUI.ArkUI.Full
206
207**参数:**
208
209| 参数名     | 类型    | 必填 | 说明                                                         |
210| ---------- | ------- | ---- | ------------------------------------------------------------ |
211| isSelected | boolean | 是   | 进入鼠标框选范围即被选中返回true,&nbsp;移出鼠标框选范围即未被选中返回false。 |
212
213## 示例
214
215### 示例1(GridItem设置自身位置)
216GridItem通过设置合理的ColumnStart、ColumnEnd、RowStart、RowEnd属性来设置自身位置。需要指定GridItem起始行列号和所占行列数的场景推荐使用[Grid的layoutOptions参数](ts-container-grid.md#gridlayoutoptions10),详细可参考[Grid的示例1](ts-container-grid.md#示例1固定行列grid)和[Grid的示例3](ts-container-grid.md#示例3可滚动grid设置跨行跨列节点)。
217
218```ts
219// xxx.ets
220@Entry
221@Component
222struct GridItemExample {
223  @State numbers: string[] = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"]
224
225  build() {
226    Column() {
227      Grid() {
228        GridItem() {
229          Text('4')
230            .fontSize(16)
231            .backgroundColor(0xFAEEE0)
232            .width('100%')
233            .height('100%')
234            .textAlign(TextAlign.Center)
235        }.rowStart(1).rowEnd(2).columnStart(1).columnEnd(2) // 同时设置合理的行列号
236
237        ForEach(this.numbers, (item: string) => {
238          GridItem() {
239            Text(item)
240              .fontSize(16)
241              .backgroundColor(0xF9CF93)
242              .width('100%')
243              .height('100%')
244              .textAlign(TextAlign.Center)
245          }
246        }, (item: string) => item)
247
248        GridItem() {
249          Text('5')
250            .fontSize(16)
251            .backgroundColor(0xDBD0C0)
252            .width('100%')
253            .height('100%')
254            .textAlign(TextAlign.Center)
255        }.columnStart(1).columnEnd(4) // 只设置列号,不会从第1列开始布局
256      }
257      .columnsTemplate('1fr 1fr 1fr 1fr 1fr')
258      .rowsTemplate('1fr 1fr 1fr 1fr 1fr')
259      .width('90%').height(300)
260    }.width('100%').margin({ top: 5 })
261  }
262}
263```
264
265![zh-cn_image_0000001174582870](figures/zh-cn_image_0000001174582870.gif)
266
267### 示例2(设置GridItem样式)
268
269使用GridItemOptions设置GridItem样式。
270
271```ts
272// xxx.ets
273@Entry
274@Component
275struct GridItemExample {
276  @State numbers: String[] = ['0', '1', '2']
277
278  build() {
279    Column({ space: 5 }) {
280      Grid() {
281        ForEach(this.numbers, (day: string) => {
282          ForEach(this.numbers, (day: string) => {
283            GridItem({style:GridItemStyle.NONE}) {
284              Text(day)
285                .fontSize(16)
286                .width('100%')
287                .height('100%')
288                .textAlign(TextAlign.Center)
289                .focusable(true)
290            }
291            .backgroundColor(0xF9CF93)
292          }, (day: string) => day)
293        }, (day: string) => day)
294      }
295      .columnsTemplate('1fr 1fr 1fr')
296      .rowsTemplate('1fr 1fr')
297      .columnsGap(4)
298      .rowsGap(4)
299      .width('60%')
300      .backgroundColor(0xFAEEE0)
301      .height(150)
302      .padding('4vp')
303
304      Grid() {
305        ForEach(this.numbers, (day: string) => {
306          ForEach(this.numbers, (day: string) => {
307            GridItem({style:GridItemStyle.PLAIN}) {
308              Text(day)
309                .fontSize(16)
310                .width('100%')
311                .height('100%')
312                .textAlign(TextAlign.Center)
313                .focusable(true)
314            }
315            .backgroundColor(0xF9CF93)
316          }, (day: string) => day)
317        }, (day: string) => day)
318      }
319      .columnsTemplate('1fr 1fr 1fr')
320      .rowsTemplate('1fr 1fr')
321      .columnsGap(4)
322      .rowsGap(4)
323      .width('60%')
324      .backgroundColor(0xFAEEE0)
325      .height(150)
326      .padding('4vp')
327    }.width('100%').margin({ top: 5 })
328  }
329}
330```
331
332![zh-ch_image_griditem_griditemoptions](figures/zh-ch_image_griditem_griditemoptions.png)
333