• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# List
2
3列表包含一系列相同宽度的列表项。适合连续、多行呈现同类数据,例如图片和文本。
4
5> **说明:**
6>
7> - 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8>
9> - 该组件内容区小于一屏时,默认没有回弹效果。需要回弹效果,可以通过edgeEffect属性的options参数进行设置。
10>
11> - List组件[通用属性clip](ts-universal-attributes-sharp-clipping.md)的默认值为true。
12>
13> - 要使List处于可编辑模式需配合onItemDelete事件和ListItem的editable属性,即可编辑模式实现删除列表项功能,需满足以下条件(该功能从API9开始废弃):
14>
15>   - editMode属性设置为true。
16>
17>   - 绑定onItemDelete事件,且事件回调返回true。
18>
19>   - ListItem的editable属性设置为true。
20>
21> - 实现ListItem拖拽,需满足以下条件:
22>
23>   - editMode属性设置为true(从API9开始无需设置editMode属性)。
24>
25>   - 绑定onDragStart事件,且事件回调中返回浮动UI布局。
26
27
28## 子组件
29
30仅支持[ListItem](ts-container-listitem.md)、[ListItemGroup](ts-container-listitemgroup.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))。
31
32> **说明:**
33>
34> List的子组件的索引值计算规则:
35>
36> 按子组件的顺序依次递增。
37>
38> if/else语句中,只有条件成立的分支内的子组件会参与索引值计算,条件不成立的分支内子组件不计算索引值。
39>
40> ForEach/LazyForEach/Repeat语句中,会计算展开所有子节点索引值。
41>
42> [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)发生变化以后,会更新子节点索引值。
43>
44> ListItemGroup作为一个整体计算一个索引值,ListItemGroup内部的ListItem不计算索引值。
45>
46> List子组件visibility属性设置为Hidden或None依然会计算索引值。
47>
48> List子组件的visibility属性设置为None时不显示,但该子组件上下的space还会生效。
49
50
51## 接口
52
53List(value?:{ initialIndex?: number, space?: number | string, scroller?: Scroller})
54
55**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
56
57**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
58
59**系统能力:** SystemCapability.ArkUI.ArkUI.Full
60
61**参数:**
62
63| 参数名       | 类型                                    | 必填 | 说明                                                     |
64| ------------ | ------------------------------------------- | ---- | ------------------------------------------------------------ |
65|    initialIndex    | number                 | 否   | 设置当前List初次加载时显示区域起始位置的item索引值。<br/>默认值:0<br/>**说明:** <br/>设置为负数或超过了当前List最后一个item的索引值时视为无效取值,无效取值按默认值显示。 |
66| space  | number&nbsp;\|&nbsp;string                                       | 否   | 子组件主轴方向的间隔。<br/>默认值:0<br/>参数类型为number时单位为vp<br/>**说明:** <br/>设置为负数或者大于等于List内容区长度时,按默认值显示。<br/>space参数值小于List分割线宽度时,子组件主轴方向的间隔取分割线宽度。 |
67| scroller     | [Scroller](ts-container-scroll.md#scroller) | 否   | 可滚动组件的控制器。用于与可滚动组件进行绑定。<br/>**说明:** <br/>不允许和其他滚动类组件绑定同一个滚动控制对象。 |
68
69## 属性
70
71除支持[通用属性](ts-universal-attributes-size.md)和[滚动组件通用属性](ts-container-scrollable-common.md#属性)外,还支持以下属性:
72
73### listDirection
74
75listDirection(value: Axis)
76
77设置List组件排列方向。
78
79**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
80
81**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
82
83**系统能力:** SystemCapability.ArkUI.ArkUI.Full
84
85**参数:**
86
87| 参数名 | 类型                              | 必填 | 说明                                       |
88| ------ | --------------------------------- | ---- | ------------------------------------------ |
89| value  | [Axis](ts-appendix-enums.md#axis) | 是   | 组件的排列方向。<br/>默认值:Axis.Vertical |
90
91### divider
92
93divider(value: {strokeWidth: Length; color?: ResourceColor; startMargin?: Length; endMargin?: Length;} | null,)
94
95设置ListItem分割线样式,默认无分割线。
96
97endMargin + startMargin 超过列宽度后startMargin和endMargin会置0。
98
99strokeWidth, startMargin和endMargin不支持设置百分比。
100
101List的分割线画在主轴方向两个子组件之间,第一个子组件上方和最后一个子组件下方不会绘制分割线。
102
103多列模式下,ListItem与ListItem之间的分割线起始边距从每一列的交叉轴方向起始边开始计算,其他情况从List交叉轴方向起始边开始计算。
104
105ListItem设置[多态样式](ts-universal-attributes-polymorphic-style.md)时,被按压的子组件上下的分割线不绘制。
106
107**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
108
109**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
110
111**系统能力:** SystemCapability.ArkUI.ArkUI.Full
112
113**参数:**
114
115| 参数名 | 类型                                                         | 必填 | 说明                                                         |
116| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
117| value  | {<br/>strokeWidth:&nbsp;[Length](ts-types.md#length),<br/>color?:[ResourceColor](ts-types.md#resourcecolor),<br/>startMargin?:&nbsp;[Length](ts-types.md#length),<br/>endMargin?:&nbsp;[Length](ts-types.md#length)<br/>}&nbsp;\|&nbsp;null | 是   | ListItem分割线样式。<br/>- strokeWidth:&nbsp;分割线的线宽。<br/>- color:&nbsp;分割线的颜色。<br/>默认值:0x08000000<br/>- startMargin:&nbsp;分割线与列表侧边起始端的距离。<br/>默认值:0,单位:vp<br/>- endMargin:&nbsp;分割线与列表侧边结束端的距离。<br/>默认值:0,单位:vp |
118
119### scrollBar
120
121scrollBar(value: BarState)
122
123设置滚动条状态。
124
125**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
126
127**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
128
129**系统能力:** SystemCapability.ArkUI.ArkUI.Full
130
131**参数:**
132
133| 参数名 | 类型                                      | 必填 | 说明                                                         |
134| ------ | ----------------------------------------- | ---- | ------------------------------------------------------------ |
135| value  | [BarState](ts-appendix-enums.md#barstate) | 是   | 滚动条状态。<br/>默认值:BarState.Auto<br/>**说明:** <br/>API version 9及以下版本默认值为BarState.Off,API version 10及以上版本的默认值为BarState.Auto。 |
136
137### cachedCount
138
139cachedCount(value: number)
140
141设置列表中ListItem/ListItemGroup的预加载数量,懒加载场景只会预加载List显示区域外cachedCount的内容,非懒加载场景会全部加载。懒加载、非懒加载都只布局List显示区域+List显示区域外cachedCount的内容。<!--Del-->具体使用可参考[减少应用白块说明](../../../performance/arkts-performance-improvement-recommendation.md#减少应用滑动白块)。<!--DelEnd-->
142
143List设置cachedCount后,显示区域外上下各会预加载并布局cachedCount行ListItem。计算ListItem行数时,会计算ListItemGroup内部的ListItem行数。如果ListItemGroup内没有ListItem,则整个ListItemGroup算一行。
144
145List下嵌套使用LazyForEach,并且LazyForEach下嵌套使用ListItemGroup时,LazyForEach会在List显示区域外上下各会创建cachedCount个ListItemGroup。
146
147**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
148
149**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
150
151**系统能力:** SystemCapability.ArkUI.ArkUI.Full
152
153**参数:**
154
155| 参数名 | 类型   | 必填 | 说明                                               |
156| ------ | ------ | ---- | -------------------------------------------------- |
157| value  | number | 是   | ListItem/ListItemGroup的预加载数量。<br/>默认值:1 |
158
159### editMode<sup>(deprecated)</sup>
160
161editMode(value: boolean)
162
163设置当前List组件是否处于可编辑模式。可参考[示例3](#示例3)实现删除选中的list项。
164
165从API version9开始废弃不再使用,无替代接口。
166
167**系统能力:** SystemCapability.ArkUI.ArkUI.Full
168
169**参数:**
170
171| 参数名 | 类型   | 必填 | 说明                                               |
172| ------ | ------ | ---- | -------------------------------------------------- |
173| value  | boolean | 是   | 当前List组件是否处于可编辑模式。<br/>默认值:false |
174
175### edgeEffect
176
177edgeEffect(value: EdgeEffect, options?: EdgeEffectOptions)
178
179设置边缘滑动效果。
180
181**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
182
183**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
184
185**系统能力:** SystemCapability.ArkUI.ArkUI.Full
186
187**参数:**
188
189| 参数名                | 类型                                                         | 必填 | 说明                                                         |
190| --------------------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
191| value                 | [EdgeEffect](ts-appendix-enums.md#edgeeffect)                | 是   | List组件的边缘滑动效果,支持弹簧效果和阴影效果。<br/>默认值:EdgeEffect.Spring |
192| options<sup>11+</sup> | [EdgeEffectOptions](ts-container-scrollable-common.md#edgeeffectoptions11对象说明) | 否   | 组件内容大小小于组件自身时,是否开启滑动效果。设置为{ alwaysEnabled: true }会开启滑动效果,{ alwaysEnabled: false }不开启。<br/>默认值:{ alwaysEnabled: false } |
193
194### chainAnimation
195
196chainAnimation(value: boolean)
197
198设置当前List是否启用链式联动动效,开启后列表滑动以及顶部和底部拖拽时会有链式联动的效果。
199
200链式联动效果:List内的ListItem间隔一定距离,该距离可以通过List组件space参数设置,默认为20vp。在手指划动过程中,手指拖动的ListItem是主动对象,相邻的ListItem为从动对象,主动对象驱动从动对象联动,驱动效果遵循弹簧物理动效。
201
202链式动效生效后,List的分割线不显示。
203
204链式动效生效需要满足以下前提条件:
205
206 1、List边缘效果为Spring类型。
207
208 2、List没有启用多列模式。
209
210**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
211
212**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
213
214**系统能力:** SystemCapability.ArkUI.ArkUI.Full
215
216**参数:**
217
218| 参数名 | 类型    | 必填 | 说明                                                         |
219| ------ | ------- | ---- | ------------------------------------------------------------ |
220| value  | boolean | 是   | 是否启用链式联动动效。<br/>默认值:false,不启用链式联动。true,启用链式联动。 |
221
222### multiSelectable<sup>8+</sup>
223
224multiSelectable(value: boolean)
225
226设置是否开启鼠标框选。
227
228**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
229
230**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
231
232**系统能力:** SystemCapability.ArkUI.ArkUI.Full
233
234**参数:**
235
236| 参数名 | 类型    | 必填 | 说明                                                         |
237| ------ | ------- | ---- | ------------------------------------------------------------ |
238| value  | boolean | 是   | 是否开启鼠标框选。<br/>默认值:false,关闭框选。true,开启框选。 |
239
240### lanes<sup>9+</sup>
241
242lanes(value: number | LengthConstrain, gutter?: Dimension)
243
244设置List组件的布局列数或行数。gutter为列间距,当列数大于1时生效。
245
246规则如下:
247
248- lanes为指定的数量时,根据指定的数量与List组件的交叉轴尺寸除以列数作为列的宽度。
249- lanes设置了{minLength,maxLength}时,根据List组件的宽度自适应决定lanes数量(即列数),保证缩放过程中lane的宽度符合{minLength,maxLength}的限制。其中,minLength条件会被优先满足,即优先保证符合ListItem的交叉轴尺寸符合最小限制。
250- lanes设置了{minLength,maxLength},如果父组件交叉轴方向尺寸约束为无穷大时,固定按一列排列,列宽度按显示区域内最大的ListItem计算。
251- &nbsp;ListItemGroup在多列模式下也是独占一行,ListItemGroup中的ListItem按照List组件的lanes属性设置值来布局。
252- lanes设置了{minLength,maxLength}时,计算列数会按照ListItemGroup的交叉轴尺寸计算。当ListItemGroup交叉轴尺寸与List交叉轴尺寸不一致时ListItemGroup中的列数与List中的列数可能不一样。
253
254**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
255
256**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
257
258**系统能力:** SystemCapability.ArkUI.ArkUI.Full
259
260**参数:**
261
262| 参数名               | 类型                                                         | 必填 | 说明                                     |
263| -------------------- | ------------------------------------------------------------ | ---- | ---------------------------------------- |
264| value                | number&nbsp;\|&nbsp;[LengthConstrain](ts-types.md#lengthconstrain) | 是   | List组件的布局列数或行数。<br/>默认值:1 |
265| gutter<sup>10+</sup> | [Dimension](ts-types.md#dimension10)                         | 否   | 列间距。<br />默认值:0                  |
266
267### alignListItem<sup>9+</sup>
268
269alignListItem(value: ListItemAlign)
270
271设置List交叉轴方向宽度大于ListItem交叉轴宽度 * lanes时,ListItem在List交叉轴方向的布局方式。
272
273**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
274
275**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
276
277**系统能力:** SystemCapability.ArkUI.ArkUI.Full
278
279**参数:**
280
281| 参数名 | 类型                                     | 必填 | 说明                                                   |
282| ------ | ---------------------------------------- | ---- | ------------------------------------------------------ |
283| value  | [ListItemAlign](#listitemalign9枚举说明) | 是   | 交叉轴方向的布局方式。<br/>默认值:ListItemAlign.Start |
284
285### sticky<sup>9+</sup>
286
287sticky(value: StickyStyle)
288
289配合[ListItemGroup](ts-container-listitemgroup.md)组件使用,设置ListItemGroup中header和footer是否要吸顶或吸底。sticky属性可以设置为 StickyStyle.Header \| StickyStyle.Footer 以同时支持header吸顶和footer吸底。
290
291> **说明:**
292>
293> 由于浮点数计算精度,设置sticky后,在List滑动过程中小概率产生缝隙,可以通过[pixelRound](ts-universal-attributes-layout-constraints.md#pixelround11)指定当前组件向下像素取整解决该问题。
294
295**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
296
297**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
298
299**系统能力:** SystemCapability.ArkUI.ArkUI.Full
300
301**参数:**
302
303| 参数名 | 类型                                 | 必填 | 说明                                                       |
304| ------ | ------------------------------------ | ---- | ---------------------------------------------------------- |
305| value  | [StickyStyle](#stickystyle9枚举说明) | 是   | ListItemGroup吸顶或吸底效果。<br/>默认值:StickyStyle.None |
306
307### scrollSnapAlign<sup>10+</sup>
308
309scrollSnapAlign(value: ScrollSnapAlign)
310
311设置列表项滚动结束对齐效果。
312
313只支持ListItem等高情况下,设置列表项滚动结束对齐效果。
314
315触控板和鼠标滑动List结束后不支持对齐效果。
316
317**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
318
319**系统能力:** SystemCapability.ArkUI.ArkUI.Full
320
321**参数:**
322
323| 参数名 | 类型                                          | 必填 | 说明                                                      |
324| ------ | --------------------------------------------- | ---- | --------------------------------------------------------- |
325| value  | [ScrollSnapAlign](#scrollsnapalign10枚举说明) | 是   | 列表项滚动结束对齐效果。<br/>默认值:ScrollSnapAlign.NONE |
326
327### enableScrollInteraction<sup>10+</sup>
328
329enableScrollInteraction(value: boolean)
330
331设置是否支持滚动手势,当设置为false时,无法通过手指或者鼠标滚动,但不影响控制器的滚动接口。
332
333**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
334
335**系统能力:** SystemCapability.ArkUI.ArkUI.Full
336
337**参数:**
338
339| 参数名 | 类型    | 必填 | 说明                                |
340| ------ | ------- | ---- | ----------------------------------- |
341| value  | boolean | 是   | 是否支持滚动手势。<br/>默认值:true |
342
343### nestedScroll<sup>10+</sup>
344
345nestedScroll(value: NestedScrollOptions)
346
347设置向前向后两个方向上的嵌套滚动模式,实现与父组件的滚动联动。
348
349**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
350
351**系统能力:** SystemCapability.ArkUI.ArkUI.Full
352
353**参数:**
354
355| 参数名 | 类型                                                         | 必填 | 说明           |
356| ------ | ------------------------------------------------------------ | ---- | -------------- |
357| value  | [NestedScrollOptions](ts-container-scrollable-common.md#nestedscrolloptions10对象说明) | 是   | 嵌套滚动选项。 |
358
359### friction<sup>10+</sup>
360
361friction(value: number | Resource)
362
363设置摩擦系数,手动划动滚动区域时生效,只对惯性滚动过程有影响,对惯性滚动过程中的链式效果有间接影响。设置为小于等于0的值时,按默认值处理。
364
365**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
366
367**系统能力:** SystemCapability.ArkUI.ArkUI.Full
368
369**参数:**
370
371| 参数名 | 类型                                                 | 必填 | 说明                                                         |
372| ------ | ---------------------------------------------------- | ---- | ------------------------------------------------------------ |
373| 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。 |
374
375### contentStartOffset<sup>11+</sup>
376
377contentStartOffset(value: number)
378
379设置内容区域起始偏移量。列表滚动到起始位置时,列表内容与列表显示区域边界保留指定距离。
380
381**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
382
383**系统能力:** SystemCapability.ArkUI.ArkUI.Full
384
385**参数:**
386
387| 参数名 | 类型   | 必填 | 说明                                            |
388| ------ | ------ | ---- | ----------------------------------------------- |
389| value  | number | 是   | 内容区域起始偏移量。<br/>默认值:0<br/>单位:vp |
390
391### contentEndOffset<sup>11+</sup>
392
393contentEndOffset(value: number)
394
395设置内容区末尾偏移量。列表滚动到末尾位置时,列表内容与列表显示区域边界保留指定距离。
396
397**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
398
399**系统能力:** SystemCapability.ArkUI.ArkUI.Full
400
401**参数:**
402
403| 参数名 | 类型   | 必填 | 说明                                          |
404| ------ | ------ | ---- | --------------------------------------------- |
405| value  | number | 是   | 内容区末尾偏移量。<br/>默认值:0<br/>单位:vp |
406
407### childrenMainSize<sup>12+</sup>
408
409childrenMainSize(value: ChildrenMainSize)
410
411设置List组件的子组件在主轴方向的大小信息。
412
413**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
414
415**系统能力:** SystemCapability.ArkUI.ArkUI.Full
416
417**参数:**
418
419| 参数名     | 类型   | 必填 | 说明                            |
420| ---------- | ------ | ---- | ------------------------------- |
421| value | [ChildrenMainSize](ts-container-scrollable-common.md#childrenmainsize12对象说明) | 是   | 1. 作用:<br/>通过ChildrenMainSize对象向List组件准确提供所有子组件在主轴方向的大小信息,能够使List组件在子组件的主轴大小不一致、增删子组件、使用[scrollToIndex](ts-container-scroll.md#scrolltoindex)等场景也能维护自己准确的滑动位置,进而使[scrollTo](ts-container-scroll.md#scrollto)能跳转到准确的指定位置,[currentOffset](ts-container-scroll.md#currentoffset)能够获取到当前准确的滑动位置,内置滚动条能够平滑移动无跳变。<br/>2.使用约束:<br/>(1)提供的主轴方向大小必须与子组件实际在主轴方向的大小一致,子组件在主轴方向大小变化或者增删子组件时都必须通过ChildrenMainSize对象方法通知List组件。<br/>(2)当子组件是ListItemGroup时,需要根据ListItemGroup的列数,ListItemGroup中ListItem在主轴方向的间距,ListItemGroup中header,footer,ListItem的大小准确计算出ListItemGroup整体在主轴方向的大小,并提供给List组件。<br/>(3)如果子组件有ListItemGroup,必须给每一个ListItemGroup也设置childrenMainSize属性,List组件和每一个ListItemGroup组件都要通过childrenMainSize属性接口一对一绑定着一个ChildrenMainSize对象。<br/>(4)多列场景使用LazyForEach生成子组件时,需确保LazyForEach全部生成ListItemGroup组件或者全部生成ListItem组件。
422
423### maintainVisibleContentPosition<sup>12+</sup>
424
425maintainVisibleContentPosition(enabled: boolean)
426
427设置显示区域上方插入或删除数据时是否要保持可见内容位置不变。
428
429**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
430
431**系统能力:** SystemCapability.ArkUI.ArkUI.Full
432
433**参数:**
434
435| 参数名 | 类型    | 必填 | 说明                                                         |
436| ------ | ------- | ---- | ------------------------------------------------------------ |
437| enabled  | boolean | 是   | 设置显示区域上方插入或删除数据时是否要保持可见内容位置不变。<br/>默认值:false,显示区域上方插入或删除数据时可见内容位置会跟随变化。 true:显示区域上方插入或删除数据时可见内容位置不变。|
438
439> **说明:**
440> - 只有使用LazyForEach在显示区域外插入或删除数据时,才能保持可见内容位置不变。使用ForEach插入或删除数据或使用LazyForEach重新加载数据时,即使maintainVisibleContentPosition属性设置为true,可见区内容位置也会跟随变化。
441> - maintainVisibleContentPosition属性设置为true后,在显示区域上方插入或删除数据,会触发onDidScroll、onScrollIndex事件。
442> - maintainVisibleContentPosition属性设置为true后,在多列场景下,一次插入或删除整行数据,可以保持可见内容位置不变,如果不是插入或删除整行数据,可见内容位置还是会发生变化。
443
444## ListItemAlign<sup>9+</sup>枚举说明
445
446**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
447
448**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
449
450**系统能力:** SystemCapability.ArkUI.ArkUI.Full
451
452| 名称     |  值  | 说明                      |
453| ------ | ------ | ------------------------- |
454| Start  | 0 | ListItem在List中,交叉轴方向首部对齐。 |
455| Center | 1 | ListItem在List中,交叉轴方向居中对齐。 |
456| End    | 2 | ListItem在List中,交叉轴方向尾部对齐。 |
457
458## StickyStyle<sup>9+</sup>枚举说明
459
460**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
461
462**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
463
464**系统能力:** SystemCapability.ArkUI.ArkUI.Full
465
466| 名称     |  值  | 说明                               |
467| ------ | ------ | ---------------------------------- |
468| None   | 0 | ListItemGroup的header不吸顶,footer不吸底。 |
469| Header | 1 | ListItemGroup的header吸顶,footer不吸底。  |
470| Footer | 2 | ListItemGroup的footer吸底,header不吸顶。  |
471
472## ScrollSnapAlign<sup>10+</sup>枚举说明
473
474设置列表项滚动结束对齐效果。
475
476左右和上下这种两端对齐的样式:当列表位移至末端,则需要将末端的item完整显示,同时不能露出边界空白区域,此时另一端可以出现不限位对齐的现象。
477
478只支持item等高场景限位,不等高场景可能存在不准确的情况。
479
480**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
481
482**系统能力:** SystemCapability.ArkUI.ArkUI.Full
483
484| 名称     |  值  | 说明                                     |
485| ------ | ------ | ---------------------------------------- |
486| NONE   | 0 | 默认无项目滚动对齐效果。            |
487| START  | 1 | 视图中的第一项将在列表的开头对齐。<br/>**说明:**<br/>当列表位移至末端,需要将末端的item完整显示,可能出现开头不对齐的情况。 |
488| CENTER | 2 | 视图中的中间项将在列表中心对齐。<br/>**说明:**<br/>顶端和末尾的item都可以在列表中心对齐,列表显示可能露出空白,<br/>第一个或最后一个item会对齐到中间位置。 |
489| END    | 3 | 视图中的最后一项将在列表末尾对齐。<br/>**说明:**<br/>当列表位移至顶端,需要将顶端的item完整显示,可能出现末尾不对齐的情况。 |
490## CloseSwipeActionOptions<sup>11+</sup>对象说明
491
492收起[EXPANDED](ts-container-listitem.md#swipeactionstate11枚举说明)状态[ListItem](ts-container-listitem.md)回调事件集合,用于设置收起动画完成后回调事件。
493
494**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
495
496**系统能力:** SystemCapability.ArkUI.ArkUI.Full
497
498| 名称     | 类型     | 必填 | 说明                   |
499| ------- | -------- | ---- | ---------------------- |
500| onFinish | ()=>void | 否   | 在收起动画完成后触发。 |
501
502## 事件
503
504除支持[通用事件](ts-universal-events-click.md)和[滚动组件通用事件](ts-container-scrollable-common.md#事件)外,还支持以下事件:
505
506### onItemDelete<sup>(deprecated)</sup>
507
508onItemDelete(event: (index: number) => boolean)
509
510当List组件在编辑模式时,点击ListItem右边出现的删除按钮时触发。
511
512从API version9开始废弃不再使用,无替代接口。
513
514**系统能力:** SystemCapability.ArkUI.ArkUI.Full
515
516**参数:**
517
518| 参数名 | 类型   | 必填 | 说明                     |
519| ------ | ------ | ---- | ------------------------ |
520| index  | number | 是   | 被删除的列表项的索引值。 |
521
522**返回值:**
523
524| 类型    | 说明           |
525| ------- | -------------- |
526| boolean | 是否已经删除。 |
527
528### onScrollIndex
529
530onScrollIndex(event: (start: number, end: number, center: number) => void)
531
532有子组件划入或划出List显示区域时触发。计算索引值时,ListItemGroup作为一个整体占一个索引值,不计算ListItemGroup内部ListItem的索引值。
533
534List的边缘效果为弹簧效果时,在List划动到边缘继续划动和松手回弹过程不会触发onScrollIndex事件。
535
536触发该事件的条件:列表初始化时会触发一次,List显示区域内第一个子组件的索引值或最后一个子组件的索引值有变化时会触发。
537
538从API version 10开始,List显示区域中间位置子组件变化时也会触发该事件。
539
540**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
541
542**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
543
544**系统能力:** SystemCapability.ArkUI.ArkUI.Full
545
546**参数:**
547
548| 参数名               | 类型   | 必填 | 说明                                   |
549| -------------------- | ------ | ---- | -------------------------------------- |
550| start                | number | 是   | List显示区域内第一个子组件的索引值     |
551| end                  | number | 是   | List显示区域内最后一个子组件的索引值。 |
552| center<sup>10+</sup> | number | 是   | List显示区域内中间位置子组件的索引值。 |
553
554### onReachStart
555
556onReachStart(event: () => void)
557
558列表到达起始位置时触发。
559
560List初始化时如果initialIndex为0会触发一次,List滚动到起始位置时触发一次。List边缘效果为弹簧效果时,划动经过起始位置时触发一次,回弹回起始位置时再触发一次。
561
562**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
563
564**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
565
566**系统能力:** SystemCapability.ArkUI.ArkUI.Full
567
568### onReachEnd
569
570onReachEnd(event: () => void)
571
572列表到底末尾位置时触发。
573
574List边缘效果为弹簧效果时,划动经过末尾位置时触发一次,回弹回末尾位置时再触发一次。
575
576**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
577
578**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
579
580**系统能力:** SystemCapability.ArkUI.ArkUI.Full
581
582### onScrollFrameBegin<sup>9+</sup>
583
584onScrollFrameBegin(event: (offset: number, state: ScrollState) => { offsetRemain: number })
585
586列表开始滑动时触发,事件参数传入即将发生的滑动量,事件处理函数中可根据应用场景计算实际需要的滑动量并作为事件处理函数的返回值返回,列表将按照返回值的实际滑动量进行滑动。
587
588当listDirection的值为Axis.Vertical时,返回垂直方向滑动量,当listDirection的值为Axis.Horizontal时,返回水平方向滑动量。
589
590触发该事件的条件:手指拖动List、List惯性划动时每帧开始时触发;List超出边缘回弹、使用滚动控制器和拖动滚动条的滚动不会触发。
591
592**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
593
594**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
595
596**系统能力:** SystemCapability.ArkUI.ArkUI.Full
597
598**参数:**
599
600| 参数名 | 类型                                | 必填 | 说明                       |
601| ------ | ----------------------------------- | ---- | -------------------------- |
602| offset | number                              | 是   | 即将发生的滑动量,单位vp。 |
603| state  | [ScrollState](#scrollstate枚举说明) | 是   | 当前滑动状态。             |
604
605**返回值:**
606
607| 类型                     | 说明                 |
608| ------------------------ | -------------------- |
609| { offsetRemain: number } | 实际滑动量,单位vp。 |
610
611### onScrollStart<sup>9+</sup>
612
613onScrollStart(event: () => void)
614
615列表滑动开始时触发。手指拖动列表或列表的滚动条触发的滑动开始时,会触发该事件。使用[Scroller](ts-container-scroll.md#scroller)滑动控制器触发的带动画的滑动,动画开始时会触发该事件
616
617**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
618
619**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
620
621**系统能力:** SystemCapability.ArkUI.ArkUI.Full
622
623### onScrollStop
624
625onScrollStop(event: () => void)
626
627列表滑动停止时触发。手拖动列表或列表的滚动条触发的滑动,手离开屏幕并且滑动停止时会触发该事件。使用[Scroller](ts-container-scroll.md#scroller)滑动控制器触发的带动画的滑动,动画停止会触发该事件。
628
629**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
630
631**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
632
633**系统能力:** SystemCapability.ArkUI.ArkUI.Full
634
635### onItemMove
636
637onItemMove(event: (from: number, to: number) => boolean)
638
639列表元素发生移动时触发。
640
641**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
642
643**系统能力:** SystemCapability.ArkUI.ArkUI.Full
644
645**参数:**
646
647| 参数名 | 类型   | 必填 | 说明           |
648| ------ | ------ | ---- | -------------- |
649| from   | number | 是   | 移动前索引值。 |
650| to     | number | 是   | 移动后索引值。 |
651
652**返回值:**
653
654| 类型    | 说明           |
655| ------- | -------------- |
656| boolean | 是否已经移动。 |
657
658### onItemDragStart<sup>8+</sup>
659
660onItemDragStart(event: (event: ItemDragInfo, itemIndex: number) => ((() => any) \| void))
661
662开始拖拽列表元素时触发。
663
664**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
665
666**系统能力:** SystemCapability.ArkUI.ArkUI.Full
667
668**参数:**
669
670| 参数名    | 类型                                                      | 必填 | 说明                   |
671| --------- | --------------------------------------------------------- | ---- | ---------------------- |
672| event     | [ItemDragInfo](ts-container-scrollable-common.md#itemdraginfo对象说明) | 是   | 拖拽点的信息。         |
673| itemIndex | number                                                    | 是   | 被拖拽列表元素索引值。 |
674
675### onItemDragEnter<sup>8+</sup>
676
677onItemDragEnter(event: (event: ItemDragInfo) => void)
678
679拖拽进入列表元素范围内时触发。
680
681**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
682
683**系统能力:** SystemCapability.ArkUI.ArkUI.Full
684
685**参数:**
686
687| 参数名 | 类型                                                      | 必填 | 说明           |
688| ------ | --------------------------------------------------------- | ---- | -------------- |
689| event  | [ItemDragInfo](ts-container-scrollable-common.md#itemdraginfo对象说明) | 是   | 拖拽点的信息。 |
690
691### onItemDragMove<sup>8+</sup>
692
693onItemDragMove(event: (event: ItemDragInfo, itemIndex: number, insertIndex: number) => void)
694
695拖拽在列表元素范围内移动时触发。
696
697**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
698
699**系统能力:** SystemCapability.ArkUI.ArkUI.Full
700
701**参数:**
702
703| 参数名      | 类型                                                      | 必填 | 说明           |
704| ----------- | --------------------------------------------------------- | ---- | -------------- |
705| event       | [ItemDragInfo](ts-container-scrollable-common.md#itemdraginfo对象说明) | 是   | 拖拽点的信息。 |
706| itemIndex   | number                                                    | 是   | 拖拽起始位置。 |
707| insertIndex | number                                                    | 是   | 拖拽插入位置。 |
708
709### onItemDragLeave<sup>8+</sup>
710
711onItemDragLeave(event: (event: ItemDragInfo, itemIndex: number) => void)
712
713拖拽离开列表元素时触发。
714
715**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
716
717**系统能力:** SystemCapability.ArkUI.ArkUI.Full
718
719**参数:**
720
721| 参数名    | 类型                                                      | 必填 | 说明                       |
722| --------- | --------------------------------------------------------- | ---- | -------------------------- |
723| event     | [ItemDragInfo](ts-container-scrollable-common.md#itemdraginfo对象说明) | 是   | 拖拽点的信息。             |
724| itemIndex | number                                                    | 是   | 拖拽离开的列表元素索引值。 |
725
726### onItemDrop<sup>8+</sup>
727
728onItemDrop(event: (event: ItemDragInfo, itemIndex: number, insertIndex: number, isSuccess: boolean) => void)
729
730绑定该事件的列表元素可作为拖拽释放目标,当在列表元素内停止拖拽时触发。
731
732跨List拖拽时,当拖拽释放的位置绑定了onItemDrop时会返回true,否则为false。List内部拖拽时,isSuccess为onItemMove事件的返回值。
733
734**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
735
736**系统能力:** SystemCapability.ArkUI.ArkUI.Full
737
738**参数:**
739
740| 参数名      | 类型                                                      | 必填 | 说明           |
741| ----------- | --------------------------------------------------------- | ---- | -------------- |
742| event       | [ItemDragInfo](ts-container-scrollable-common.md#itemdraginfo对象说明) | 是   | 拖拽点的信息。 |
743| itemIndex   | number                                                    | 是   | 拖拽起始位置。 |
744| insertIndex | number                                                    | 是   | 拖拽插入位置。 |
745| isSuccess   | boolean                                                   | 是   | 是否成功释放   |
746
747
748### onScroll<sup>(deprecated)</sup>
749onScroll(event: (scrollOffset: number, scrollState: [ScrollState](#scrollstate枚举说明)) => void)
750
751列表滑动时触发。
752
753从API version 12开始废弃不再使用,推荐使用[onDidScroll](ts-container-scrollable-common.md#ondidscroll12)事件替代。
754
755**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
756
757**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
758
759**系统能力:** SystemCapability.ArkUI.ArkUI.Full
760
761**参数:**
762| 参数名 | 类型 | 必填 | 说明 |
763| ------ | ------ | ------ | ------|
764| scrollOffset | number | 是 | 每帧滚动的偏移量,List的内容向上滚动时偏移量为正,向下滚动时偏移量为负。<br/>单位vp。 |
765| scrollState | [ScrollState](ts-container-list.md#scrollstate枚举说明) | 是 | 当前滑动状态。 |
766
767### onScrollVisibleContentChange<sup>12+</sup>
768onScrollVisibleContentChange(handler: OnScrollVisibleContentChangeCallback)
769
770有子组件划入或划出List显示区域时触发。计算触发条件时,每一个ListItem、ListItemGroup中的header或footer都算一个子组件。
771
772List的边缘效果为弹簧效果时,在List划动到边缘继续划动和松手回弹过程不会触发onScrollVisibleContentChange事件。
773
774触发该事件的条件:列表初始化时会触发一次,List显示区域内第一个子组件的索引值或最后一个子组件的索引值有变化时会触发。
775
776**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
777
778**系统能力:** SystemCapability.ArkUI.ArkUI.Full
779
780**参数:**
781
782| 参数名 | 类型 | 必填 | 说明 |
783| ------ | ------ | ------ | ------|
784| handler | [OnScrollVisibleContentChangeCallback](#onscrollvisiblecontentchangecallback12) | 是 | 当前显示内容发生改变的时候触发回调。 |
785
786## ScrollState枚举说明
787
788**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
789
790**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
791
792**系统能力:** SystemCapability.ArkUI.ArkUI.Full
793
794| 名称     |  值  | 说明                                     |
795| ------ | ------ | ---------------------------------------- |
796| Idle   |  0  | 空闲状态。滚动状态回归空闲时触发,控制器提供的无动画方法控制滚动时触发。 |
797| Scroll |  1  | 滚动状态。手指拖动List,拖动滚动条和滚动鼠标滚轮时触发。|
798| Fling  |  2  | 惯性滚动状态。动画控制的滚动都会触发。包括快速划动松手后的惯性滚动, <br/>划动到边缘回弹的滚动,快速拖动内置滚动条松手后的惯性滚动, <br/>使用滚动控制器提供的带动画的方法控制的滚动。 |
799
800
801## ListScroller<sup>11+</sup>对象说明
802
803List组件的滚动控制器,通过它控制List组件的滚动,仅支持一对一绑定到List组件。
804
805
806>  **说明:**
807>
808>  ListScroller继承自[Scroller](ts-container-scroll.md#scroller),具有[Scroller](ts-container-scroll.md#scroller)的全部方法。
809
810
811### 导入对象
812
813```
814listScroller: ListScroller = new ListScroller()
815```
816
817
818### getItemRectInGroup<sup>11+</sup>
819
820getItemRectInGroup(index: number, indexInGroup: number): RectResult
821
822获取[ListItemGroup](ts-container-listitemgroup.md)中的[ListItem](ts-container-listitem.md)的大小和相对于List的位置。
823
824**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
825
826**系统能力:** SystemCapability.ArkUI.ArkUI.Full
827
828**参数:**
829
830| 参数名   | 类型   | 必填   | 说明              |
831| ----- | ------ | ---- | ----------------- |
832| index | number | 是    | ListItemGroup在List中的索引值。 |
833| indexInGroup | number | 是    | ListItem在ListItemGroup中的索引值。 |
834
835> **说明:**
836>
837> - index必须是当前显示区域显示的子组件的索引值,否则视index为非法值。
838> - 索引值为index的子组件必须是ListItemGroup,否则视index为非法值。
839> - indexInGroup必须是当前显示区域内ListItemGroup中显示的ListItem的索引值,否则视indexInGroup为非法值。
840> - index或者indexInGroup为非法值时返回的大小和位置均为0。
841
842**返回值:**
843
844| 类型       | 说明       |
845| -------------------  | -------- |
846| [RectResult](ts-types.md#rectresult10) | ListItemGroup中的ListItem的大小和相对于List的位置。<br/>单位:vp。 |
847
848
849**错误码**:
850
851以下错误码详细介绍请参考[通用错误码](../../errorcode-universal.md)。
852
853| 错误码ID | 错误信息 |
854| ------- | -------- |
855| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2.Incorrect parameters types; 3. Parameter verification failed.   |
856| 100004   | Controller not bound to component.                               |
857
858### scrollToItemInGroup<sup>11+</sup>
859
860scrollToItemInGroup(index: number, indexInGroup: number, smooth?: boolean, align?: ScrollAlign): void
861
862滑动到指定的ListItemGroup中指定的ListItem。
863
864开启smooth动效时,会对经过的所有item进行加载和布局计算,当大量加载item时会导致性能问题。
865
866**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
867
868**系统能力:** SystemCapability.ArkUI.ArkUI.Full
869
870**参数:**
871
872| 参数名                | 类型 | 必填 | 说明                                                     |
873| --------------------- | -------- | ---- | ------------------------------------------------------------ |
874| index                 | number   | 是   | 要滑动到的目标元素所在的ListItemGroup在当前容器中的索引值。      <br/>**说明:** <br/>index值设置成负值或者大于当前容器子组件的最大索引值,视为异常值,本次跳转不生效。                     |
875| indexInGroup          | number   | 是   | 要滑动到的目标元素在index指定的ListItemGroup中的索引值。      <br/>**说明:** <br/>indexInGroup值设置成负值或者大于index指定的ListItemGroup容器子组件的最大索引值,视为异常值,本次跳转不生效。|
876| smooth                | boolean  | 否   | 设置滑动到列表项在列表中的索引值时是否有动效,true表示有动效,false表示没有动效。<br/>默认值:false。 |
877| align                 | [ScrollAlign](ts-container-scroll.md#scrollalign10枚举说明)  | 否   | 指定滑动到的元素与当前容器的对齐方式。<br/>默认值:ScrollAlign.START。 |
878
879**错误码**:
880
881以下错误码详细介绍请参考[通用错误码](../../errorcode-universal.md)。
882
883| 错误码ID | 错误信息 |
884| ------- | -------- |
885| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2.Incorrect parameters types; 3. Parameter verification failed.   |
886| 100004   | Controller not bound to component.                               |
887
888### closeAllSwipeActions<sup>11+</sup>
889
890closeAllSwipeActions(options?: [CloseSwipeActionOptions](#closeswipeactionoptions11对象说明)): void
891
892将[EXPANDED](ts-container-listitem.md#swipeactionstate11枚举说明)状态的[ListItem](ts-container-listitem.md)收起,并设置回调事件。
893
894**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
895
896**系统能力:** SystemCapability.ArkUI.ArkUI.Full
897
898**参数:**
899
900| 参数名  | 类型                                  | 必填 | 说明                                            |
901| ------- | ------------------------------------ | ---- | ----------------------------------------------- |
902| options | [CloseSwipeActionOptions](#closeswipeactionoptions11对象说明) | 否   | 收起[EXPANDED](ts-container-listitem.md#swipeactionstate11枚举说明)状态的[ListItem](ts-container-listitem.md)的回调事件集合。 |
903
904
905**错误码**:
906
907以下错误码详细介绍请参考[通用错误码](../../errorcode-universal.md)。
908
909| 错误码ID | 错误信息 |
910| ------- | -------- |
911| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2.Incorrect parameters types; 3. Parameter verification failed.   |
912| 100004   | Controller not bound to component.                               |
913
914> **说明:**
915>
916> - ListScroller必须绑定到List组件上。
917
918## OnScrollVisibleContentChangeCallback<sup>12+</sup>
919
920type OnScrollVisibleContentChangeCallback = (start: VisibleListContentInfo, end: VisibleListContentInfo) => void
921
922有子组件划入或划出List显示区域时触发。
923
924**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
925
926**系统能力:** SystemCapability.ArkUI.ArkUI.Full
927
928| 参数名 | 类型 | 必填 | 说明 |
929| ------ | ------ | ------ | ------|
930| start | [VisibleListContentInfo](#visiblelistcontentinfo12对象说明) | 是 | 当前显示界面第一个ListItem或ListItemGroup的详细信息。 |
931| end | [VisibleListContentInfo](#visiblelistcontentinfo12对象说明) | 是 | 当前显示界面最后一个ListItem或ListItemGroup的详细信息。 |
932
933## VisibleListContentInfo<sup>12+</sup>对象说明
934
935**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
936
937**系统能力:** SystemCapability.ArkUI.ArkUI.Full
938
939| 名称 | 类型 | 必填 | 说明 |
940| ------ | ------ | ------ | ------|
941| index | number | 是 | List显示区域内ListItem或ListItemGroup的索引值。 |
942| itemGroupArea | [ListItemGroupArea](#listitemgrouparea12枚举说明) | 否 | 如果当前可视页面的上边或下边在某个ListItemGroup之中,将会显示它所处的位置。 |
943| itemIndexInGroup | number | 否 | 如果当前可视页面的上边或下边在某个Group之中,将会显示Start或End的ListItem在Group中的索引。 |
944
945## ListItemGroupArea<sup>12+</sup>枚举说明
946
947**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
948
949**系统能力:** SystemCapability.ArkUI.ArkUI.Full
950
951| 名称     |  值  | 说明                                     |
952| ------ | ------ | ---------------------------------------- |
953| NONE |  0  | 当前页面可视边处于none位置。例如,ListItemGroup中既没有header、footer,也没有ListItem。 |
954| IN_LIST_ITEM_AREA |  1  | 当前页面可视边处于ListItem位置。 |
955| IN_HEADER_AREA |  2  | 当前页面可视边处于header位置。 |
956| IN_FOOTER_AREA |  3  | 当前页面可视边处于footer位置。 |
957
958## 示例
959
960### 示例1
961该示例实现了设置纵向列表,并在当前显示界面发生改变时回调索引。
962```ts
963// xxx.ets
964@Entry
965@Component
966struct ListExample {
967  private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
968
969  build() {
970    Column() {
971      List({ space: 20, initialIndex: 0 }) {
972        ForEach(this.arr, (item: number) => {
973          ListItem() {
974            Text('' + item)
975              .width('100%').height(100).fontSize(16)
976              .textAlign(TextAlign.Center).borderRadius(10).backgroundColor(0xFFFFFF)
977          }
978        }, (item: string) => item)
979      }
980      .listDirection(Axis.Vertical) // 排列方向
981      .scrollBar(BarState.Off)
982      .friction(0.6)
983      .divider({ strokeWidth: 2, color: 0xFFFFFF, startMargin: 20, endMargin: 20 }) // 每行之间的分界线
984      .edgeEffect(EdgeEffect.Spring) // 边缘效果设置为Spring
985      .onScrollIndex((firstIndex: number, lastIndex: number, centerIndex: number) => {
986        console.info('first' + firstIndex)
987        console.info('last' + lastIndex)
988        console.info('center' + centerIndex)
989      })
990      .onScrollVisibleContentChange((start: VisibleListContentInfo, end: VisibleListContentInfo) => {
991        console.log(' start index: ' + start.index +
992                    ' start item group area: ' + start.itemGroupArea +
993                    ' start index in group: ' + start.itemIndexInGroup)
994        console.log(' end index: ' + end.index +
995                    ' end item group area: ' + end.itemGroupArea +
996                    ' end index in group: ' + end.itemIndexInGroup)
997      })
998      .onDidScroll((scrollOffset: number, scrollState: ScrollState) => {
999        console.info(`onScroll scrollState = ScrollState` + scrollState + `, scrollOffset = ` + scrollOffset)
1000      })
1001      .width('90%')
1002    }
1003    .width('100%')
1004    .height('100%')
1005    .backgroundColor(0xDCDCDC)
1006    .padding({ top: 5 })
1007  }
1008}
1009```
1010
1011![zh-cn_image_0000001174264378](figures/zh-cn_image_0000001174264378.gif)
1012
1013
1014### 示例2
1015
1016```ts
1017// xxx.ets
1018@Entry
1019@Component
1020struct ListLanesExample {
1021  @State arr: string[] = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19"]
1022  @State alignListItem: ListItemAlign = ListItemAlign.Start
1023
1024  build() {
1025    Column() {
1026      List({ space: 20, initialIndex: 0 }) {
1027        ForEach(this.arr, (item: string) => {
1028          ListItem() {
1029            Text('' + item)
1030              .width('100%')
1031              .height(100)
1032              .fontSize(16)
1033              .textAlign(TextAlign.Center)
1034              .borderRadius(10)
1035              .backgroundColor(0xFFFFFF)
1036          }
1037          .border({ width: 2, color: Color.Green })
1038        }, (item: string) => item)
1039      }
1040      .height(300)
1041      .width("90%")
1042      .friction(0.6)
1043      .border({ width: 3, color: Color.Red })
1044      .lanes({ minLength: 40, maxLength: 40 })
1045      .alignListItem(this.alignListItem)
1046      .scrollBar(BarState.Off)
1047
1048      Button("点击更改alignListItem:" + this.alignListItem).onClick(() => {
1049        if (this.alignListItem == ListItemAlign.Start) {
1050          this.alignListItem = ListItemAlign.Center
1051        } else if (this.alignListItem == ListItemAlign.Center) {
1052          this.alignListItem = ListItemAlign.End
1053        } else {
1054          this.alignListItem = ListItemAlign.Start
1055        }
1056      })
1057    }.width('100%').height('100%').backgroundColor(0xDCDCDC).padding({ top: 5 })
1058  }
1059}
1060```
1061
1062![list](figures/list-alignListItem.gif)
1063
1064
1065### 示例3
1066
1067```ts
1068// xxx.ets
1069@Entry
1070@Component
1071struct ListExample {
1072  @State arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
1073  @State editFlag: boolean = false
1074
1075  build() {
1076    Stack({ alignContent: Alignment.TopStart }) {
1077      Column() {
1078        List({ space: 20, initialIndex: 0 }) {
1079          ForEach(this.arr, (item: number, index?: number) => {
1080            ListItem() {
1081              Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) {
1082                Text('' + item)
1083                  .width('100%')
1084                  .height(80)
1085                  .fontSize(20)
1086                  .textAlign(TextAlign.Center)
1087                  .borderRadius(10)
1088                  .backgroundColor(0xFFFFFF)
1089                  .flexShrink(1)
1090                if (this.editFlag) {
1091                  Button() {
1092                    Text("delete").fontSize(16)
1093                  }.width('30%').height(40)
1094                  .onClick(() => {
1095                    if (index != undefined) {
1096                      console.info(this.arr[index] + 'Delete')
1097                      this.arr.splice(index, 1)
1098                      console.info(JSON.stringify(this.arr))
1099                      this.editFlag = false
1100                    }
1101                  }).stateEffect(true)
1102                }
1103              }
1104            }
1105          }, (item: string) => item)
1106        }.width('90%')
1107        .scrollBar(BarState.Off)
1108        .friction(0.6)
1109      }.width('100%')
1110
1111      Button('edit list')
1112        .onClick(() => {
1113          this.editFlag = !this.editFlag
1114        }).margin({ top: 5, left: 20 })
1115    }.width('100%').height('100%').backgroundColor(0xDCDCDC).padding({ top: 5 })
1116  }
1117}
1118```
1119
1120![list](figures/list3.gif)
1121
1122### 示例4
1123
1124```ts
1125// xxx.ets
1126@Entry
1127@Component
1128struct ListExample {
1129  private arr: number[] = []
1130  private scrollerForList: Scroller = new Scroller()
1131
1132  aboutToAppear() {
1133    for (let i = 0; i < 20; i++) {
1134      this.arr.push(i)
1135    }
1136  }
1137  build() {
1138    Column() {
1139      Row() {
1140        List({ space: 20, initialIndex: 3, scroller: this.scrollerForList }) {
1141          ForEach(this.arr, (item: number) => {
1142            ListItem() {
1143              Text('' + item)
1144                .width('100%').height(100).fontSize(16)
1145                .textAlign(TextAlign.Center)
1146            }
1147            .borderRadius(10).backgroundColor(0xFFFFFF)
1148            .width('60%')
1149            .height('80%')
1150          }, (item: number) => JSON.stringify(item))
1151        }
1152        .chainAnimation(true)
1153        .edgeEffect(EdgeEffect.Spring)
1154        .listDirection(Axis.Horizontal)
1155        .height('100%')
1156        .width('100%')
1157        .scrollSnapAlign(ScrollSnapAlign.CENTER)
1158        .borderRadius(10)
1159        .backgroundColor(0xDCDCDC)
1160      }
1161      .width('100%')
1162      .height('100%')
1163      .backgroundColor(0xDCDCDC)
1164      .padding({ top: 10 })
1165    }
1166  }
1167}
1168
1169```
1170
1171![list](figures/list4.gif)
1172
1173### 示例5
1174该示例通过设置childrenMainSize属性,实现了List在子组件高度不一致时调用scrollTo接口也可以跳转准确。
1175```ts
1176// xxx.ets
1177@Entry
1178@Component
1179struct ListExample {
1180  private arr: number[] = []
1181  private scroller: ListScroller = new ListScroller()
1182  @State listSpace: number = 10
1183  @State listChildrenSize: ChildrenMainSize = new ChildrenMainSize(100)
1184  aboutToAppear(){
1185    // 初始化数据源。
1186    for (let i = 0; i < 10; i++) {
1187      this.arr.push(i)
1188    }
1189    // 前5个item的主轴大小不是默认大小100,因此需要通过ChildrenMainSize通知List。
1190    this.listChildrenSize.splice(0, 5, [300, 300, 300, 300, 300])
1191  }
1192  build() {
1193    Column() {
1194      List({ space: this.listSpace, initialIndex: 4, scroller: this.scroller }) {
1195        ForEach(this.arr, (item: number) => {
1196          ListItem() {
1197            Text('item-' + item)
1198              .height( item < 5 ? 300 : this.listChildrenSize.childDefaultSize)
1199              .width('90%')
1200              .fontSize(16)
1201              .textAlign(TextAlign.Center)
1202              .borderRadius(10)
1203              .backgroundColor(0xFFFFFF)
1204          }
1205        }, (item: string) => item)
1206      }
1207      .backgroundColor(Color.Gray)
1208      .layoutWeight(1)
1209      .scrollBar(BarState.On)
1210      .childrenMainSize(this.listChildrenSize)
1211      .alignListItem(ListItemAlign.Center)
1212      Row(){
1213        Button() { Text('item size + 50') }.onClick(()=>{
1214          this.listChildrenSize.childDefaultSize += 50
1215        }).height('50%').width('30%')
1216        Button() { Text('item size - 50') }.onClick(()=>{
1217          if (this.listChildrenSize.childDefaultSize === 0) {
1218            return
1219          }
1220          this.listChildrenSize.childDefaultSize -= 50
1221        }).height('50%').width('30%')
1222        Button() { Text('scrollTo (0, 310)') }.onClick(()=>{
1223          // 310: 跳转到item 1顶部与List顶部平齐的位置。
1224          // 如果不设置childrenMainSize,item高度不一致时scrollTo会不准确。
1225          this.scroller.scrollTo({xOffset: 0, yOffset: 310})
1226        }).height('50%').width('30%')
1227      }.height('20%')
1228    }
1229  }
1230}
1231
1232```
1233
1234![list](figures/list5.gif)