1# ArkUI子系统Changelog 2 3## cl.arkui.1 Repeat virtualScroll模式下,key不变&item改变的数据不刷新 4 5**访问级别** 6 7公开接口 8 9**变更原因** 10 11Repeat组件缓存复用能力优化。 12 13**变更影响** 14 15此变更涉及应用适配。 16 17- 变更前:key不变,item改变,界面立即触发刷新,数据改变。 18 19- 变更后:key不变,item改变,认为节点没有发生变化,界面不会立即触发刷新。 20 21eg. 运行下面的Demo示例,进入页面后,点击“click”按钮改变数组项的值。 22 23```ts 24@ObservedV2 25class RepeatData { 26 @Trace id: string; 27 @Trace msg: string; 28 29 constructor(id: string, msg: string) { 30 this.id = id; 31 this.msg = msg; 32 } 33} 34 35@Entry 36@ComponentV2 37struct RepeatRerender { 38 @Local dataArr: Array<RepeatData> = []; 39 40 aboutToAppear(): void { 41 for (let i = 0; i < 10; i++) { 42 this.dataArr.push(new RepeatData(`key${i}`, `data${i}`)); 43 } 44 } 45 46 build() { 47 Column({ space: 20 }) { 48 List() { 49 Repeat<RepeatData>(this.dataArr) 50 .each((ri: RepeatItem<RepeatData>) => { 51 ListItem() { 52 Text(ri.item.msg).fontSize(30) 53 } 54 }) 55 .key((item: RepeatData, index: number) => item.id) 56 .virtualScroll() 57 } 58 .cachedCount(2) 59 .width('100%') 60 .height('40%') 61 .border({ width: 1 }) 62 .backgroundColor(0xFAEEE0) 63 64 Button('click').onClick(() => { 65 this.dataArr.splice(0, 1, new RepeatData('key0', 'new msg')); // 改变列表第一项的数据,保持key不变 66 }) 67 } 68 } 69} 70``` 71 72变更前:点击按钮后,节点数据发生变化,如下图所示。 73 74 75 76变更后:点击按钮后,节点数据没有变化。 77 78**起始API Level** 79 8012 81 82**变更发生版本** 83 84从OpenHarmony SDK 5.1.0.55开始。 85 86**适配指导** 87 88应用是否需要适配需要根据具体场景决定。如果开发者希望页面中的列表数据随着键值key的变化而变化(key不改变时页面不刷新),则无需更改`.key()`。 89 90如果希望数据发生变化就触发页面刷新,第一种方法(建议):去掉Repeat的`.key()`函数;第二种方法:`.key()`的值的变化和数据变化保持一致。以上面的Demo为例,两种修改方案分别如下。 91 92第一种方案,去掉Repeat的`.key()`函数: 93 94```ts 95@ObservedV2 96class RepeatData { 97 @Trace id: string; 98 @Trace msg: string; 99 100 constructor(id: string, msg: string) { 101 this.id = id; 102 this.msg = msg; 103 } 104} 105 106@Entry 107@ComponentV2 108struct RepeatRerender { 109 @Local dataArr: Array<RepeatData> = []; 110 111 aboutToAppear(): void { 112 for (let i = 0; i < 10; i++) { 113 this.dataArr.push(new RepeatData(`key${i}`, `data${i}`)); 114 } 115 } 116 117 build() { 118 Column({ space: 20 }) { 119 List() { 120 Repeat<RepeatData>(this.dataArr) 121 .each((ri: RepeatItem<RepeatData>) => { 122 ListItem() { 123 Text(ri.item.msg).fontSize(30) 124 } 125 }) 126 .virtualScroll() // 删除.key()函数 127 } 128 .cachedCount(2) 129 .width('100%') 130 .height('40%') 131 .border({ width: 1 }) 132 .backgroundColor(0xFAEEE0) 133 134 Button('click').onClick(() => { 135 this.dataArr.splice(0, 1, new RepeatData('key0', 'new msg')); // 改变列表第一项的数据,保持key不变 136 }) 137 } 138 } 139} 140``` 141 142第二种方案,修改`.key()`,使得`.key()`的值的变化和数据变化保持一致: 143 144```ts 145@ObservedV2 146class RepeatData { 147 @Trace id: string; 148 @Trace msg: string; 149 150 constructor(id: string, msg: string) { 151 this.id = id; 152 this.msg = msg; 153 } 154} 155 156@Entry 157@ComponentV2 158struct RepeatRerender { 159 @Local dataArr: Array<RepeatData> = []; 160 161 aboutToAppear(): void { 162 for (let i = 0; i < 10; i++) { 163 this.dataArr.push(new RepeatData(`key${i}`, `data${i}`)); 164 } 165 } 166 167 build() { 168 Column({ space: 20 }) { 169 List() { 170 Repeat<RepeatData>(this.dataArr) 171 .each((ri: RepeatItem<RepeatData>) => { 172 ListItem() { 173 Text(ri.item.msg).fontSize(30) 174 } 175 }) 176 .key((item: RepeatData, index: number) => item.msg) // .key()的值的变化和数据变化保持一致,数据改变时key也会改变 177 .virtualScroll() 178 } 179 .cachedCount(2) 180 .width('100%') 181 .height('40%') 182 .border({ width: 1 }) 183 .backgroundColor(0xFAEEE0) 184 185 Button('click').onClick(() => { 186 this.dataArr.splice(0, 1, new RepeatData('key0', 'new msg')); // 改变列表第一项的数据,保持key不变 187 }) 188 } 189 } 190} 191``` 192 193## cl.arkui.2 selectDialog未选中radio样式变更 194 195**访问级别** 196 197公开接口 198 199**变更原因** 200 201弹窗内容风格优化,增强用户体验。 202 203**变更影响** 204 205此变更不涉及应用适配。 206 207变更点1:selectDialog未选中radio样式变更。 208 209| 变更前 | 变更后 | 210|-------------------------------------------------------------------------------------------|----------------------------------------------------------------------------| 211| selectDialog未选中时的radio为显示非高亮状态。<br>  | selectDialog未选中时的radio不显示。<br> | 212 213 214**起始API Level** 215 216API 11 217 218**变更发生版本** 219 220从OpenHarmony SDK 5.1.0.55开始。 221 222**变更的接口/组件** 223 224advancedDialog.selectDialog 225 226**适配指导** 227 228默认行为变更,无需适配。系统弹窗默认规格优化演进,若开发者有其他布局、样式诉求,建议使用CustomDialog自定义实现。 229 230## cl.arkui.3 Navigation工具栏文本样式变更 231 232**访问级别** 233 234公开接口 235 236**变更原因** 237 238UX规范变更。 239 240**变更影响** 241 242此变更不涉及应用适配。 243 244- 变更前:Navigation工具栏文本最多显示两行,文本高度12_vp。 245 246- 变更后:Navigation工具栏文本最多显示一行,文本高度10_vp。 247 248| | 变更前 | 变更后 | 249| ------------ | ------ | ------ | 250| 文本样式 |  |  | 251 252**起始API Level** 253 254Navigation组件toolbarConfiguration接口:起始支持版本为 API 10。 255 256NavDestination组件toolbarConfiguration接口:起始支持版本为 API 13。 257 258**变更发生版本** 259 260从OpenHarmony SDK 5.1.0.55开始。 261 262**变更的接口/组件** 263 264涉及组件: Navigation, NavDestination组件。 265 266涉及接口: 267 268Navigation组件: 269 270toolbarConfiguration(value: Array<ToolbarItem> | CustomBuilder, options?: NavigationToolbarOptions) 271 272NavDestination组件: 273 274toolbarConfiguration(toolbarParam: Array<ToolbarItem> | CustomBuilder, options?: NavigationToolbarOptions) 275 276**适配指导** 277 278默认效果变更,无需适配。 279 280## cl.arkui.4 Navigation工具栏高度变更 281 282**访问级别** 283 284公开接口 285 286**变更原因** 287 288UX规范变更。 289 290**变更影响** 291 292此变更不涉及应用适配。 293 294- 变更前:Navigation工具栏高度为56_vp。 295 296- 变更后:Navigation工具栏高度为48_vp。 297 298| | 变更前 | 变更后 | 299|---------|---------|---------| 300|工具栏高度|  |  | 301 302**起始API Level** 303 304Navigation组件toolbarConfiguration接口:起始支持版本为 API 10。 305 306NavDestination组件toolbarConfiguration接口:起始支持版本为 API 13。 307 308**变更发生版本** 309 310从OpenHarmony SDK 5.1.0.55开始。 311 312**变更的接口/组件** 313 314涉及组件: Navigation, NavDestination组件。 315 316涉及接口: 317 318Navigation组件: 319 320toolbarConfiguration(value: Array<ToolbarItem> | CustomBuilder, options?: NavigationToolbarOptions) 321 322NavDestination组件: 323 324toolbarConfiguration(toolbarParam: Array<ToolbarItem> | CustomBuilder, options?: NavigationToolbarOptions) 325 326**适配指导** 327 328默认效果变更,无需适配。 329 330## cl.arkui.5 Navigation工具栏聚焦、Hover态样式变更 331 332**访问级别** 333 334公开接口 335 336**变更原因** 337 338UX规范变更。 339 340**变更影响** 341 342此变更不涉及应用适配。 343 344- 变更前:Navigation工具栏聚焦/Hover态高度56.0_vp,长度随item数目自适应,Hover态圆角大小为8.0_vp。 345 346- 变更后:Navigation工具栏聚焦/Hover态高度44.0_vp,长度比原来减少4vp(比原来上下左右各增加2vp的padding),Hover态圆角大小为12.0_vp。 347 348| | 变更前 | 变更后 | 349|---------|---------|---------| 350|聚焦态|  |  | 351|Hover态|  |  | 352 353**起始API Level** 354 355Navigation组件toolbarConfiguration接口:起始支持版本为 API 10。 356 357NavDestination组件toolbarConfiguration接口:起始支持版本为 API 13。 358 359**变更发生版本** 360 361从OpenHarmony SDK 5.1.0.55开始。 362 363**变更的接口/组件** 364 365涉及组件: Navigation, NavDestination组件。 366 367涉及接口: 368 369Navigation组件: 370 371toolbarConfiguration(value: Array<ToolbarItem> | CustomBuilder, options?: NavigationToolbarOptions) 372 373NavDestination组件: 374 375toolbarConfiguration(toolbarParam: Array<ToolbarItem> | CustomBuilder, options?: NavigationToolbarOptions) 376 377**适配指导** 378 379默认效果变更,无需适配。 380 381## cl.arkui.6 Navigation工具栏单个item上下边距变更 382 383**访问级别** 384 385公开接口 386 387**变更原因** 388 389UX规范变更。 390 391**变更影响** 392 393此变更不涉及应用适配。 394 395- 变更前:上边距8vp下边距10vp。 396 397- 变更后:上下边距都是6vp。 398 399| | 变更前 | 变更后 | 400|---------|---------|---------| 401|单个item上下边距|  |  | 402 403**起始API Level** 404 405Navigation组件toolbarConfiguration接口:起始支持版本为 API 10。 406 407NavDestination组件toolbarConfiguration接口:起始支持版本为 API 13。 408 409**变更发生版本** 410 411从OpenHarmony SDK 5.1.0.55开始。 412 413**变更的接口/组件** 414 415涉及组件: Navigation, NavDestination组件。 416 417涉及接口: 418 419Navigation组件: 420 421toolbarConfiguration(value: Array<ToolbarItem> | CustomBuilder, options?: NavigationToolbarOptions) 422 423NavDestination组件: 424 425toolbarConfiguration(toolbarParam: Array<ToolbarItem> | CustomBuilder, options?: NavigationToolbarOptions) 426 427**适配指导** 428 429默认效果变更,无需适配。 430 431## cl.arkui.7 Navigation工具栏选项取消按压态 432 433**访问级别** 434 435公开接口 436 437**变更原因** 438 439UX规范变更。 440 441**变更影响** 442 443此变更不涉及应用适配。 444 445- 变更前:工具栏选项具有按压态。 446 447- 变更后:工具栏选项取消按压态。 448 449| | 变更前 | 变更后 | 450|---------|---------|---------| 451|选项按压态|  |  | 452 453**起始API Level** 454 455Navigation组件toolbarConfiguration接口:起始支持版本为 API 10。 456 457NavDestination组件toolbarConfiguration接口:起始支持版本为 API 13。 458 459**变更发生版本** 460 461从OpenHarmony SDK 5.1.0.55开始。 462 463**变更的接口/组件** 464 465涉及组件: Navigation, NavDestination组件。 466 467涉及接口: 468 469Navigation组件: 470 471toolbarConfiguration(value: Array<ToolbarItem> | CustomBuilder, options?: NavigationToolbarOptions) 472 473NavDestination组件: 474 475toolbarConfiguration(toolbarParam: Array<ToolbarItem> | CustomBuilder, options?: NavigationToolbarOptions) 476 477**适配指导** 478 479默认效果变更,无需适配。 480 481## cl.arkui.8 修复blendMode接口离屏模式会影响组件设置的不透明度的问题 482 483**访问级别** 484 485公开接口 486 487**变更原因** 488 489blendMode离屏模式与不透明度属性(opacity)同时使用时,组件的不透明度并不等于设置的不透明度,效果异常。 490 491**变更影响** 492 493此变更涉及应用适配,仅针对组件设置了blendMode离屏模式且具有不透明度的场景。 494 495变更前:组件设置了blendMode离屏模式,同时设置了opacity不透明度 A,则组件实际不透明度为 A * A 496 497变更后:组件设置了blendMode离屏模式,同时设置了opacity不透明度 A,则组件实际不透明度为 A 498 499变更前后效果如下: 500 501|变更前|变更后| 502|--|--| 503||| 504 505 506 507**起始API Level** 508 509API 11 510 511 512**变更发生版本** 513 514从 OpenHarmony SDK 5.1.0.55 开始。 515 516**变更的接口/组件** 517 518blendMode 接口 519 520**适配指导** 521 522如果开发者希望在同时使用blendMode离屏模式和opacity接口时保持组件的不透明度不变,则需要手动调整原本设定的不透明度。例如,在下方示例代码中,在 Stack()上额外设置.opacity(0.5),以确保实际的透明度为 0.5 * 0.5。 523 524```ts 525@Entry 526@Component 527struct Index { 528 build() { 529 Column() { 530 Stack() { 531 } 532 .height('50%') 533 .width('50%') 534 .backgroundColor(0x0A59F7) 535 .blendMode(BlendMode.SRC_OVER, BlendApplyType.OFFSCREEN) 536 .opacity(0.5) // 变更后需要额外设置0.5的不透明度保证实际透明度为 0.5*0.5 537 } 538 .height('100%') 539 .width('100%') 540 .backgroundColor(0xFFFFFF) 541 .opacity(0.5) 542 } 543} 544``` 545 546 547