1# ArcList 2 3<!--Kit: ArkUI--> 4<!--Subsystem: ArkUI--> 5<!--Owner: @yylong--> 6<!--Designer: @yylong--> 7<!--Tester: @liuzhenshuo--> 8<!--Adviser: @HelloCrease--> 9 10弧形列表包含一系列列表项。适合连续、多行呈现同类数据,例如图片和文本。 11 12> **说明:** 13> 14> 该组件从API version 18开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 15 16 17## 导入模块 18 19```ts 20import { ArcList, ArcListAttribute } from '@kit.ArkUI'; 21``` 22 23## 子组件 24 25仅支持[ArcListItem](ts-container-arclistitem.md)子组件。 26 27> **说明:** 28> 29> ArcList的子组件索引值计算规则: 30> 31> - 按子组件的顺序依次递增。 32> 33> - [if/else](../../../ui/state-management/arkts-rendering-control-ifelse.md)语句中,只有条件成立的分支内的子组件会参与索引值计算,条件不成立的分支内子组件不计算索引值。 34> 35> - [ForEach](../../../ui/state-management/arkts-rendering-control-foreach.md)/[LazyForEach](../../../ui/state-management/arkts-rendering-control-lazyforeach.md)语句中,会计算展开所有子节点索引值。 36> 37> - [if/else](../../../ui/state-management/arkts-rendering-control-ifelse.md)、[ForEach](../../../ui/state-management/arkts-rendering-control-foreach.md)和[LazyForEach](../../../ui/state-management/arkts-rendering-control-lazyforeach.md)发生变化以后,会更新子节点索引值。 38> 39> - ArcList子组件[visibility](ts-universal-attributes-visibility.md#visibility)属性设置为Hidden或None依然会计算索引值。 40 41 42## 接口 43 44ArcList(options?: ArkListOptions) 45 46创建弧形列表实例,传入弧形列表配置项参数。 47 48**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 49 50**系统能力:** SystemCapability.ArkUI.ArkUI.Circle 51 52**参数:** 53 54| 参数名 | 类型 | 必填 | 说明 | 55| ------- | ----------------------------------------- | ---- | ----------------------- | 56| options | [ArkListOptions](#arklistoptions) | 否 | 为ArcList提供可选参数。 | 57 58## 属性 59 60除支持[通用属性](ts-component-general-attributes.md)外,还支持以下属性: 61 62### digitalCrownSensitivity 63 64digitalCrownSensitivity(sensitivity: Optional\<CrownSensitivity>) 65 66设置表冠响应事件灵敏度。 67 68**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 69 70**系统能力:** SystemCapability.ArkUI.ArkUI.Circle 71 72**参数:** 73 74| 参数名 | 类型 | 必填 | 说明 | 75| ----------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | 76| sensitivity | [Optional<CrownSensitivity>](ts-appendix-enums.md#crownsensitivity18) | 是 | 表冠响应灵敏度。<br/>默认值:CrownSensitivity.MEDIUM,响应速度适中。 | 77 78### space 79 80space(space: Optional\<LengthMetrics>) 81 82设置列表子项之间的距离。 83 84**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 85 86**系统能力:** SystemCapability.ArkUI.ArkUI.Circle 87 88**参数:** 89 90| 参数名 | 类型 | 必填 | 说明 | 91| ------ | ------------------------------------------------------------ | ---- | ---------------------------------- | 92| space | [Optional<LengthMetrics>](../js-apis-arkui-graphics.md#lengthmetrics12) | 是 | 列表子项之间的间距。<br/>默认值:0<br/>ArcList子组件的[visibility](ts-universal-attributes-visibility.md#visibility)属性设置为None时不显示,但该子组件上下的space还会生效。 | 93 94### scrollBar 95 96scrollBar(status: Optional\<BarState>) 97 98设置滚动条状态。 99 100**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 101 102**系统能力:** SystemCapability.ArkUI.ArkUI.Circle 103 104**参数:** 105 106| 参数名 | 类型 | 必填 | 说明 | 107| ------ | ---------------------------------------------------- | ---- | ---------------------------------------- | 108| status | [Optional\<BarState>](ts-appendix-enums.md#barstate) | 是 | 滚动条状态。<br/>默认值:BarState.Auto | 109 110### cachedCount 111 112cachedCount(count: Optional\<number>) 113 114设置列表中ArcListItem的预加载数量,懒加载场景只会预加载ArcList显示区域外cachedCount的内容,非懒加载场景会全部加载。懒加载、非懒加载都只布局ArcList显示区域+ArcList显示区域外cachedCount的内容。 115 116ArcList设置cachedCount后,显示区域外上下各会预加载并布局cachedCount行ArcListItem。 117 118**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 119 120**系统能力:** SystemCapability.ArkUI.ArkUI.Circle 121 122**参数:** 123 124| 参数名 | 类型 | 必填 | 说明 | 125| ------ | ----------------- | ---- | ------------------------------------------ | 126| count | Optional\<number> | 是 | ArcListItem的预加载数量。<br/>默认值:根据屏幕内显示的节点个数设置,最大值为16。<br/>取值范围:[0, +∞) | 127 128### chainAnimation 129 130chainAnimation(enable: Optional\<boolean>) 131 132设置当前ArcList是否启用链式联动动效,开启后列表滑动以及顶部和底部拖拽时会有链式联动的效果。 133 134链式联动效果:ArcList内的ArcListItem间隔一定距离,在基本的滑动交互行为下,主动对象驱动从动对象进行联动,驱动效果遵循弹簧物理动效。 135 136链式动效生效需要满足前提条件:ArcList边缘效果为[EdgeEffect.Spring](ts-appendix-enums.md#edgeeffect)类型。 137 138**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 139 140**系统能力:** SystemCapability.ArkUI.ArkUI.Circle 141 142**参数:** 143 144| 参数名 | 类型 | 必填 | 说明 | 145| ------ | ------------------ | ---- | ------------------------------------------------------------ | 146| enable | Optional\<boolean> | 是 | 是否启用链式联动动效。<br/>默认值:false,不启用链式联动。true,启用链式联动。 | 147 148### enableScrollInteraction 149 150enableScrollInteraction(enable: Optional\<boolean>) 151 152设置是否支持滚动手势。 153 154**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 155 156**系统能力:** SystemCapability.ArkUI.ArkUI.Circle 157 158**参数:** 159 160| 参数名 | 类型 | 必填 | 说明 | 161| ------ | ------------------ | ---- | ----------------------------------- | 162| enable | Optional\<boolean> | 是 | 是否支持滚动手势。设置为true时可以通过手指或者鼠标滚动,设置为false时无法通过手指或者鼠标滚动,但不影响控制器[Scroller](ts-container-scroll.md#scroller)的滚动接口。<br/>默认值:true | 163 164### fadingEdge 165 166fadingEdge(enable: Optional<boolean>) 167 168设置是否开启边缘渐隐效果。 169 170**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 171 172**系统能力:** SystemCapability.ArkUI.ArkUI.Circle 173 174**参数:** 175 176| 参数名 | 类型 | 必填 | 说明 | 177| ------- | ------------------------------------------------- | ---- | ------------------------------------------------------------ | 178| enable | Optional<boolean> | 是 | fadingEdge生效时,会覆盖原组件的.overlay()属性。<br/>fadingEdge生效时,建议不在该组件上设置background相关属性,会影响渐隐的显示效果。<br/>fadingEdge生效时,组件会裁剪到边界,设置组件的clip属性为false不生效。<br/>设置为true时开启边缘渐隐效果,设置为false时不开启边缘渐隐效果。<br/>默认值:false | 179 180### friction 181 182friction(friction: Optional\<number>) 183 184设置摩擦系数,手动划动滚动区域时生效,仅影响惯性滚动过程,对惯性滚动过程中的链式效果有间接影响。设置为小于等于0的值时,按默认值处理。 185 186**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 187 188**系统能力:** SystemCapability.ArkUI.ArkUI.Circle 189 190**参数:** 191 192| 参数名 | 类型 | 必填 | 说明 | 193| -------- | ----------------- | ---- | ---------------------------- | 194| friction | Optional\<number> | 是 | 摩擦系数。<br/>默认值:0.8<br/>取值范围:(0, +∞) | 195 196### scrollBarWidth 197 198scrollBarWidth(width: Optional\<LengthMetrics>) 199 200设置滚动条的宽度。宽度设置后,滚动条按压状态宽度为设置的宽度值。 201 202**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 203 204**系统能力:** SystemCapability.ArkUI.ArkUI.Circle 205 206**参数:** 207 208| 参数名 | 类型 | 必填 | 说明 | 209| ------ | ------------------------------------------------------------ | ---- | ----------------------------------------------------------- | 210| width | [Optional<LengthMetrics>](../js-apis-arkui-graphics.md#lengthmetrics12) | 是 | 滚动条的宽度。<br/>默认值:24<br/>最小值:4<br />单位:vp | 211 212### scrollBarColor 213 214scrollBarColor(color: Optional\<ColorMetrics>) 215 216设置滚动条的颜色。 217 218**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 219 220**系统能力:** SystemCapability.ArkUI.ArkUI.Circle 221 222**参数:** 223 224| 参数名 | 类型 | 必填 | 说明 | 225| ------ | ------------------------------------------------------------ | ---- | ---------------------------------------- | 226| color | [Optional\<ColorMetrics>](../js-apis-arkui-graphics.md#colormetrics12) | 是 | 设置滚动条颜色。<br />默认值:0xA9FFFFFF | 227 228### flingSpeedLimit 229 230flingSpeedLimit(speed: Optional\<number>) 231 232限制跟手滑动结束后,惯性滚动动效开始时的最大初始速度。设置为小于等于0的值时,按默认值处理。 233 234**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 235 236**系统能力:** SystemCapability.ArkUI.ArkUI.Circle 237 238**参数:** 239 240| 参数名 | 类型 | 必填 | 说明 | 241| ------ | ----------------- | ---- | ------------------------------- | 242| speed | Optional\<number> | 是 | 惯性滚动动效开始时的最大初始速度。<br/>默认值:9000<br/>单位:vp/s<br />取值范围:(0, +∞) | 243 244### childrenMainSize 245 246childrenMainSize(size: Optional\<ChildrenMainSize>) 247 248设置ArcList组件的子组件在主轴方向的大小信息。 249 250**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 251 252**系统能力:** SystemCapability.ArkUI.ArkUI.Circle 253 254**参数:** 255 256| 参数名 | 类型 | 必填 | 说明 | 257| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | 258| size | [Optional\<ChildrenMainSize>](ts-container-scrollable-common.md#childrenmainsize12对象说明) | 是 | 通过[ChildrenMainSize](ts-container-scrollable-common.md#childrenmainsize12对象说明)对象向ArcList组件精确提供所有子组件在主轴方向的大小信息,能够确保ArcList组件在子组件主轴尺寸不统一、子组件的增删变动、以及使用[scrollToIndex](ts-container-scroll.md#scrolltoindex)等场景时,仍能保持其滑动位置的准确性。进而保证了[scrollTo](ts-container-scroll.md#scrollto)能够精准跳转至指定位置,[currentOffset](ts-container-scroll.md#currentoffset)准确反映当前的滑动位置,且内置滚动条能够实现平滑移动,避免任何跳跃或突变。<br/> **说明:** <br/>提供的主轴方向大小必须与子组件实际在主轴方向的大小一致,子组件在主轴方向大小发生变化或进行增删操作时,必须通过调用ChildrenMainSize对象的方法来及时通知ArcList组件。 | 259 260## 事件 261 262### onScrollIndex 263 264onScrollIndex(handler: Optional\<ArcScrollIndexHandler>) 265 266当子组件划入或划出ArcList的显示区域时,将触发此事件。在ArcList初始化时,此事件会被触发一次。当ArcList显示区域内的首个或末个子组件的索引值发生变化,或是显示区域中心的子组件发生变动时,同样会触发此事件。 267 268ArcList的边缘效果为弹簧效果时,在ArcList划动到边缘继续划动和松手回弹过程不会触发onScrollIndex事件。 269 270**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 271 272**系统能力:** SystemCapability.ArkUI.ArkUI.Circle 273 274**参数:** 275 276| 参数名 | 类型 | 必填 | 说明 | 277| ------- | ------------------------------------------------------------ | ---- | ----------------------------------------------- | 278| handler | [Optional\<ArcScrollIndexHandler>](#arcscrollindexhandler) | 是 | 有子组件划入或划出ArcList显示区域时触发该回调。 | 279 280### onReachStart 281 282onReachStart(handler: Optional\<VoidCallback>) 283 284列表到达起始位置时触发。 285 286当ArcList进行初始化时,若[initialIndex](#arklistoptions)设定为0,将触发一次事件。当ArcList滚动至起始位置,亦会触发一次事件。在ArcList的边缘效果设置为弹簧效果时,滑动经过起始位置时会触发一次事件,而在回弹返回起始位置时,将再次触发一次事件。 287 288**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 289 290**系统能力:** SystemCapability.ArkUI.ArkUI.Circle 291 292**参数:** 293 294| 参数名 | 类型 | 必填 | 说明 | 295| ------- | ------------------------------------------------ | ---- | ------------------------ | 296| handler | [Optional\<VoidCallback>](ts-types.md#voidcallback12) | 是 | 列表到达起始位置时触发。 | 297 298### onReachEnd 299 300onReachEnd(handler: Optional\<VoidCallback>) 301 302列表到达末尾位置时触发。 303 304ArcList边缘效果为弹簧效果时,划动经过末尾位置时触发一次该事件,回弹回末尾位置时再触发一次该事件。 305 306**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 307 308**系统能力:** SystemCapability.ArkUI.ArkUI.Circle 309 310**参数:** 311 312| 参数名 | 类型 | 必填 | 说明 | 313| ------- | ------------------------------------------------ | ---- | ------------------------ | 314| handler | [Optional\<VoidCallback>](ts-types.md#voidcallback12) | 是 | 列表到达末尾位置时触发。 | 315 316### onScrollStart 317 318onScrollStart(handler: Optional\<VoidCallback>) 319 320列表滑动开始时触发。手指拖动列表或列表的滚动条触发的滑动开始时,会触发该事件。使用[Scroller](ts-container-scroll.md#scroller)滑动控制器触发的带动画的滑动,动画开始时会触发该事件。 321 322**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 323 324**系统能力:** SystemCapability.ArkUI.ArkUI.Circle 325 326**参数:** 327 328| 参数名 | 类型 | 必填 | 说明 | 329| ------- | ------------------------------------------------ | ---- | -------------------- | 330| handler | [Optional\<VoidCallback>](ts-types.md#voidcallback12) | 是 | 列表滑动开始时触发。 | 331 332### onScrollStop 333 334onScrollStop(handler: Optional\<VoidCallback>) 335 336列表滑动停止时触发。手拖动列表或列表的滚动条触发的滑动,手离开屏幕后滑动停止时会触发该事件。使用[Scroller](ts-container-scroll.md#scroller)滑动控制器触发的带动画的滑动,动画停止会触发该事件。 337 338**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 339 340**系统能力:** SystemCapability.ArkUI.ArkUI.Circle 341 342**参数:** 343 344| 参数名 | 类型 | 必填 | 说明 | 345| ------- | ------------------------------------------------ | ---- | -------------------- | 346| handler | [Optional\<VoidCallback>](ts-types.md#voidcallback12) | 是 | 列表滑动停止时触发。 | 347 348### onWillScroll 349 350onWillScroll(handler: Optional\<OnWillScrollCallback>) 351 352列表划动时每帧开始前触发,返回当前帧将要滑动的偏移量和当前滑动状态。返回的偏移量为计算得到的将要滑动的偏移量值,并非最终实际滑动偏移。 353 354**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 355 356**系统能力:** SystemCapability.ArkUI.ArkUI.Circle 357 358**参数:** 359 360| 参数名 | 类型 | 必填 | 说明 | 361| ------ | ------ | ------ | ------| 362| handler | [Optional\<OnWillScrollCallback>](ts-container-scrollable-common.md#onwillscrollcallback12) | 是 | 列表划动时每帧开始前触发的回调。 | 363 364> **说明:** 365> 366> 调用ScrollEdge和不带动画的ScrollToIndex时,不触发onWillScroll。 367 368### onDidScroll 369onDidScroll(handler: Optional\<OnScrollCallback>) 370 371列表滑动时触发,返回当前帧滑动的偏移量和当前滑动状态。 372 373**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 374 375**系统能力:** SystemCapability.ArkUI.ArkUI.Circle 376 377**参数:** 378 379| 参数名 | 类型 | 必填 | 说明 | 380| ------ | ------ | ------ | ------| 381| handler | [Optional\<OnScrollCallback>](ts-container-scrollable-common.md#onscrollcallback12) | 是 | 列表滑动时触发的回调。 | 382 383## ArkListOptions 384 385包含创建ArcList组件的基础参数。 386 387**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 388 389**系统能力:** SystemCapability.ArkUI.ArkUI.Circle 390 391| 名称 | 类型 | 只读 | 可选 | 说明 | 392| ------------ | ------------------------------------------- | ---- | --- | ------------------------------------------------------------ | 393| initialIndex | number | 否 | 是 | 设置当前ArcList初次加载时视口起始位置显示的item的索引值。<br/>默认值:0<br/>**说明:** <br/>设置为负数或超过了当前ArcList最后一个item的索引值时视为无效取值,无效取值按默认值显示。 | 394| scroller | [Scroller](ts-container-scroll.md#scroller) | 否 | 是 | 可滚动组件的控制器。用于与可滚动组件进行绑定。<br/>**说明:** <br/>不允许和其他滚动类组件,如:[ArcList](ts-container-arclist.md)、[List](ts-container-list.md)、[Grid](ts-container-grid.md)、[Scroll](ts-container-scroll.md)和[WaterFlow](ts-container-waterflow.md)绑定同一个滚动控制对象。 | 395| header | [ComponentContent](../js-apis-arkui-ComponentContent.md) | 否 | 是 | 支持标题设置。 | 396 397## ArcScrollIndexHandler 398 399type ArcScrollIndexHandler = (start: number, end: number, center: number) => void 400 401有子组件划入或划出ArcList显示区域时触发的回调。 402 403**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。 404 405**系统能力:** SystemCapability.ArkUI.ArkUI.Circle 406 407**参数:** 408 409| 参数名 | 类型 | 必填 | 说明 | 410| ------ | ------ | ---- | ----------------------------------------- | 411| start | number | 是 | ArcList显示区域内第一个子组件的索引值。 | 412| end | number | 是 | ArcList显示区域内最后一个子组件的索引值。 | 413| center | number | 是 | ArcList显示区域内中间位置子组件的索引值。 | 414 415## 示例 416 417该示例增加了ArcList支持标题栏设置的效果,子项自动缩放显示。 418 419```ts 420// xxx.ets 421import { ComponentContent, LengthMetrics } from '@kit.ArkUI'; 422import { UIContext, CircleShape } from '@kit.ArkUI'; 423import { ArcList, ArcListItem, ArcListAttribute, ArcListItemAttribute } from '@kit.ArkUI'; 424 425@Builder 426function buildText() { 427 Column() { 428 Text("header") 429 .fontSize('60px') 430 .fontWeight(FontWeight.Bold) 431 }.margin(0) 432} 433 434@Entry 435@Component 436struct Index { 437 @State private numItems: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; 438 439 private watchSize: string = '466px' // 手表默认宽高:466*466 440 private listSize: string = '414px' // item宽度 441 442 context: UIContext = this.getUIContext() 443 tabBar1: ComponentContent<Object> = new ComponentContent(this.context, wrapBuilder(buildText)); 444 445 @Builder 446 buildList2() { 447 Stack() { 448 Column() { 449 } 450 .justifyContent(FlexAlign.Center) 451 .width(this.watchSize) 452 .height(this.watchSize) 453 .clipShape(new CircleShape({ width: '100%', height: '100%' })) 454 .backgroundColor(Color.White) 455 456 ArcList({ initialIndex: 0, header: this.tabBar1 }) { 457 ForEach(this.numItems, (item: number, index: number) => { 458 ArcListItem() { 459 Button('' + item, { type: ButtonType.Capsule }) 460 .width(this.listSize) 461 .height('100px') 462 .fontSize('40px') 463 .focusable(true) 464 .focusOnTouch(true) 465 .backgroundColor(0x17A98D) 466 }.align(Alignment.Center) 467 }, (item: number, index: number) => (item + index).toString()) 468 } 469 .space(LengthMetrics.px(10)) 470 .borderRadius(this.watchSize) 471 .focusable(true) 472 .focusOnTouch(true) 473 .defaultFocus(true) 474 } 475 .align(Alignment.Center) 476 .width(this.watchSize) 477 .height(this.watchSize) 478 .border({color: Color.Black, width: 1}) 479 .borderRadius(this.watchSize) 480 } 481 482 build() { 483 Column() { 484 this.buildList2() 485 } 486 .width('100%') 487 .height('100%') 488 .alignItems(HorizontalAlign.Center) 489 .justifyContent(FlexAlign.Center) 490 } 491} 492``` 493 494