1# ArkUI子系统变更说明 2 3## cl.arkui.1 弹窗避让安全区域行为变更 4 5**访问级别** 6 7公开接口 8 9**变更原因** 10 11蒙层区域无法覆盖底部导航栏,沉浸式模式下内容无法避让导航栏与状态栏。 12 13**变更影响** 14 15该变更为非兼容性变更。 16 17变更前:1.弹窗蒙层显示区域未延伸至底部导航条;2.在showInSubwindow为true或应用配置为沉浸式时,内容未避让顶部状态栏与底部导航条。 18 19变更后:1.弹窗蒙层显示区域默认延伸至底部导航条;2.在showInSubwindow为true或应用配置为沉浸式时,内容会避让顶部状态栏与底部导航条。 20 21如下图所示为设置Alignment为Bottom时变更前后效果对比: 22 23 24 25**API Level** 26 27AlertDialog、CustomDialog 起始支持版本为 API 7,ActionSheet、DatePickerDialog、TimePickerDialog、TextPickerDialog 起始支持版本为 API 8,promptAction.showDialog 起始支持版本为 API 9,promptAction.openCustomDialog 起始支持版本为 API 11。 28 29**变更发生版本** 30 31从OpenHarmony SDK 5.0.0.19开始。 32 33**变更的接口/组件** 34 35受影响的组件:promptAction.showDialog、promptAction.openCustomDialog、AlertDialog、ActionSheet、DatePickerDialog、TimePickerDialog、TextPickerDialog、CustomDialog。 36 37**适配指导** 38 39若开发者需要弹窗内容不避让导航条,可设置aligment为DialogAligment.Bottom、offset.dy为导航栏高度, 具体示例代码如下: 401.EntryAbility页面设置窗口全屏,获取顶部状态栏与底部导航栏高度 41```ts 42// src/main/ets/entryability/EntryAbility.ets 43import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; 44import { window } from '@kit.ArkUI'; 45 46export default class EntryAbility extends UIAbility { 47 onWindowStageCreate(windowStage: window.WindowStage): void { 48 windowStage.loadContent('pages/Index', (err, data) => { 49 if (err.code) { 50 return; 51 } 52 // 获取应用主窗口 53 let windowClass: window.Window = windowStage.getMainWindowSync(); 54 // 设置窗口全屏 55 windowClass.setWindowLayoutFullScreen(true) 56 // 获取状态栏高度 57 let statusArea = windowClass.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM); 58 AppStorage.setOrCreate('SafeAreaTopHeight', statusArea.topRect.height); 59 // 获取导航栏高度 60 let navigationArea = windowClass.getWindowAvoidArea(window.AvoidAreaType.TYPE_NAVIGATION_INDICATOR); 61 AppStorage.setOrCreate('SafeAreaBottomHeight', navigationArea.bottomRect.height); 62 }); 63 } 64} 65``` 66 672.调用弹窗页面设置alignment与offset 68```ts 69// src/main/ets/pages/Index.ets 70let storage = LocalStorage.getShared(); 71 72@CustomDialog 73struct CustomDialogExample { 74 controller?: CustomDialogController 75 76 build() { 77 Column() { 78 Text('这是一个弹窗') 79 .fontSize(30) 80 .height(100) 81 Button('点我关闭弹窗') 82 .onClick(() => { 83 if (this.controller != undefined) { 84 this.controller.close() 85 } 86 }) 87 .margin(20) 88 } 89 } 90} 91 92@Entry(storage) 93@Component 94struct CustomDialogUser { 95 safeAreaTopHeight: string = AppStorage.get<number>('SafeAreaTopHeight') + 'px'; 96 safeAreaBottomHeight: string = AppStorage.get<number>('SafeAreaBottomHeight') + 'px'; 97 dialogController: CustomDialogController | null = new CustomDialogController({ 98 builder: CustomDialogExample(), 99 alignment: DialogAlignment.Bottom, 100 offset: { dx: 0, dy: this.safeAreaBottomHeight } 101 }) 102 103 build() { 104 Column() { 105 Button('点击打开弹窗') 106 .onClick(() => { 107 if (this.dialogController != null) { 108 this.dialogController.open() 109 } 110 }) 111 } 112 .width('100%') 113 .height('100%') 114 .justifyContent(FlexAlign.Center) 115 } 116} 117``` 118 119## cl.arkui.2 linearGradient、sweepGradient、radialGradient通用属性及LinearGradient interface中的colors参数类型从Array<any>变更为Array<[ResourceColor, number]> 120 121**访问级别** 122 123公开接口 124 125**变更原因** 126 127any类型过于宽泛,从api上没有引导开发者使用正确的参数类型。 128 129**变更影响** 130 131该变更为非兼容性变更。 132 133变更前:允许将linearGradient、sweepGradient、radialGradient通用属性及LinearGradient interface中的colors参数定义为Array<any>类型。 134 135变更后:如果使用了与Array<[ResourceColor, number]>不兼容的colors参数类型,如Array<any>,编译报错。 136 137**API Level** 138 139linearGradient、sweepGradient、radialGradient通用属性的起始支持版本为API 7,LinearGradient interface中的起始支持版本为API 9。 140 141**变更发生版本** 142 143从OpenHarmony SDK 5.0.0.19开始。 144 145**适配指导** 146 147如果需要定义linearGradient、sweepGradient、radialGradient接口中使用的变量,colors参数的类型应准确定义为与Array<[ResourceColor, number]>兼容的类型。 148 149例如: 150```ts 151@Entry 152@Component 153struct Test { 154 colors: Array<any> = [[0xff0000, 0.0], [0x0000ff, 0.3], [0xffff00, 1.0]]; 155 build() { 156 Row() 157 .width('90%') 158 .height(50) 159 .linearGradient({ 160 angle: 90, 161 // colors定义为了Array<any>类型,与需要的类型Array<[ResourceColor, number]>不兼容,将产生编译报错 162 colors: this.colors 163 }) 164 } 165} 166``` 167应将定义colors改为与api定义兼容的类型,如colors: Array<[ResourceColor, number]> = [[0xff0000, 0.0], [0x0000ff, 0.3], [0xffff00, 1.0]]. 168 169## cl.arkui.3 sweepGradient、radialGradient通用属性的center参数类型从Array<any>变更为[Length, Length] 170 171**访问级别** 172 173公开接口 174 175**变更原因** 176 177any类型过于宽泛,从api上没有引导开发者使用正确的参数类型,也没有从api上约束center的长度为2。 178 179**变更影响** 180 181该变更为非兼容性变更。 182 183变更前:允许将sweepGradient、radialGradient通用属性的center参数类型定义为Array<any>类型。 184 185变更后:如果使用了与[Length, Length]不兼容的center参数类型,编译报错。 186 187**API Level** 188 1897 190 191**变更发生版本** 192 193从OpenHarmony SDK 5.0.0.19开始。 194 195**适配指导** 196 197如果需要定义sweepGradient、radialGradient接口中使用的变量,center参数的类型应准确定义为与[Length, Length]兼容的类型。 198 199例如: 200```ts 201@Entry 202@Component 203struct Test { 204 myCenter: Array<number> = [50, 50]; 205 build() { 206 Row() 207 .width(100) 208 .height(100) 209 .sweepGradient({ 210 // Array<number>与需要的类型[Length, Length]不兼容,将产生编译报错 211 center: this.myCenter, 212 start: 0, 213 end: 359, 214 colors: [[0xff0000, 0.0], [0x0000ff, 0.3], [0xffff00, 1.0]] 215 }) 216 } 217} 218``` 219应将myCenter定义为与api定义兼容的类型,可改为myCenter: [number, number] = [50, 50]. 220 221## cl.arkui.4 TextInput、TextArea、Search文本手柄颜色和文本选中底板颜色显示样式变更 222 223**访问级别** 224 225公开接口 226 227**变更原因** 228 229该变更为非兼容性变更。 230 231**变更影响** 232 233a) TextInput、TextArea、Search文本手柄颜色,显示样式变更 234 235变更前:TextInput、TextArea、Search文本手柄颜色,显示为默认颜色。 236 237变更后:TextInput、TextArea、Search文本手柄颜色,显示为光标颜色。 238 239如下图所示为变更前后效果对比: 240 241 242 243**API Level** 244 245TextInput起始支持版本为 API 7,TextArea、Search起始支持版本为 API 8 246 247**变更发生版本** 248 249从OpenHarmony SDK 5.0.0.19开始。 250 251**适配指导** 252 253默认样式变更调整,无需适配。 254 255 256## cl.arkui.5 @observed、@track装饰器命名变更为@ObservedV2、@Trace 257 258**访问级别** 259 260公开接口 261 262**变更原因** 263 264新装饰器@observed、@track与旧装饰器@Observed、@Track十分相似不易区分,且由小写字母开头与其他现有装饰器风格不一致。现将@observed、@track装饰器更名为@ObservedV2、@Trace,以便开发者将新旧装饰器区分开来,同时保持装饰器命名风格的统一。 265 266**变更影响** 267 268该变更为非兼容性变更,影响如下: 269 270原有使用@observed装饰器装饰的类需要更改为使用@ObservedV2装饰。 271 272原有使用@track装饰器装饰的类中成员属性需要更改为使用@Trace装饰。 273 274变更前: 275 276```ts 277@observed 278class Info { 279 @track name: string = "Tom"; 280 @track age: number = 25; 281 id: number = 0; 282} 283@Entry 284@Component 285struct Index { 286 info: Info = new Info(); 287 build() { 288 Column() { 289 Text("Name: " + this.info.name) 290 Text("Age: " + this.info.age) 291 } 292 } 293} 294``` 295 296变更后: 297 298```ts 299@ObservedV2 300class Info { 301 @Trace name: string = "Tom"; 302 @Trace age: number = 25; 303 id: number = 0; 304} 305@Entry 306@Component 307struct Index { 308 info: Info = new Info(); 309 build() { 310 Column() { 311 Text("Name: " + this.info.name) 312 Text("Age: " + this.info.age) 313 } 314 } 315} 316``` 317 318**影响范围** 319 320@observed装饰器、@track装饰器 321 322**起始API Level** 323 324@observed:API12 325 326@track:API12 327 328**变更发生版本** 329 330从OpenHarmony SDK 5.0.0.19开始。 331 332**适配指导** 333 334使用@ObservedV2装饰类,@Trace装饰类中成员属性。 335 336```ts 337@ObservedV2 338class Person { 339 id: number = 0; 340 @Trace age: number = 8; 341} 342@Entry 343@Component 344struct Index { 345 person: Person = new Person(); 346 347 build() { 348 Column() { 349 Text(`${this.person.age}`) 350 } 351 } 352} 353``` 354 355## cl.arkui.6 LocalStorage实例对象作为参数传入@Entry装饰器的LocalStorage对象返回值变更 356 357**访问级别** 358 359公开接口 360 361**变更原因** 362 363LocalStorage实例对象属性通过@Entry传入时,值不生效。 364 365**变更影响** 366 367通过对象属性传入的LocalStorage实例对象值,对页面UI的变化从不生效到变成生效。 368 369变更前:this.parentLinkNumber的返回值为1。 370 371变更后:this.parentLinkNumber的返回值为47。 372 373示例1: 374 375```ts 376let param_47: Record<string, number> = { 'PropA': 47 }; 377let customStorage: LocalStorage = new LocalStorage(param_47); 378const objEntryOp: EntryOptions = { 379 storage: customStorage 380} 381interface InterfaceObj { 382 EntOpt: EntryOptions 383} 384const obj: InterfaceObj = { 385 EntOpt: objEntryOp 386} 387@Entry(obj.EntOpt) 388@Component 389struct ChainCallStorage { 390 @LocalStorageLink('PropA') parentLinkNumber: number = 1; 391 392 build() { 393 Column({ space: 15 }) { 394 Button(`点击=== ${this.parentLinkNumber}`) 395 .onClick(() => { 396 this.parentLinkNumber += 1; 397 }) 398 } 399 } 400} 401``` 402 403示例2: 404 405```ts 406let param_47: Record<string, number> = { 'PropA': 47 }; 407let customStorage8: LocalStorage = new LocalStorage(param_47); 408 409interface InterfaceObj { 410 storage: LocalStorage 411} 412const obj: InterfaceObj = { 413 storage: customStorage8 414} 415 416@Entry(obj.storage) 417@Component 418struct ChainCallStorage1 { 419 @LocalStorageLink('PropA') parentLinkNumber: number = 1; 420 421 build() { 422 Column({ space: 15 }) { 423 Button(`点击=== ${this.parentLinkNumber}`) 424 .onClick(() => { 425 this.parentLinkNumber += 1; 426 }) 427 } 428 } 429} 430``` 431 432**API Level** 433 434起始支持版本为 API 12。 435 436**变更发生版本** 437 438从OpenHarmony SDK 5.0.0.18开始。 439 440**适配指导** 441 442请参考相关文档规范,做相应适配整改,LocalStorage实例对象的赋值优先级高于本地默认值。 443 444[@LocalStorageProp初始化规则](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/arkts-localstorage.md) 445 446## cl.arkui.7 RichEditor处于获焦时调用addTextSpan,addImageSpan,addBuilderSpan,addSymbolSpan,光标位置变更 447 448**访问级别** 449 450公开接口 451 452**变更原因** 453 454RichEditor处于获焦时调用addTextSpan,addImageSpan,addBuilderSpan,addSymbolSpan,光标位置显示异常 455 456**变更影响** 457 458当RichEditor处于获焦时调用addTextSpan,addImageSpan,addBuilderSpan,addSymbolSpan光标位置逻辑统一 459 460变更前:RichEditor处于获焦时,调用addTextSpan,addImageSpan,addBuilderSpan,addSymbolSpan时,生效后光标位置会根据offset信息与插入前光标位置信息进行确定光标不会动或进行移动 461 462变更后:RichEditor处于获焦时,调用addTextSpan,addImageSpan,addBuilderSpan,addSymbolSpan后,光标位置信息一律在所插内容之后显示 463 464**起始API Level** 465 466addTextSpan,addImageSpan 起始支持版本为10,addBuilderSpan,addSymbolSpan 起始支持版本为11 467 468**变更发生版本** 469 470从OpenHarmony SDK 5.0.0.19开始。 471 472**适配指导** 473 474在获焦时RichEditor调用addTextSpan,addImageSpan,addBuilderSpan,addSymbolSpan后,光标位置调整,开发者无需后续对光标位置信息做适配。 475 476## cl.arkui.8 全屏模态转场/半模态转场onAppear回调触发时序修正 477 478**访问级别** 479 480公开接口 481 482**变更原因** 483 484为保持onAppear回调与onDisappear回调命名和行为一致,将onAppear回调触发时序由模态页面显示动画开始前修正为模态页面显示动画结束后 485 486**变更影响** 487 488该变更为非兼容性变更。 489 490全屏模态转场/半模态转场的onAppear回调,由模态页面显示动画开始前触发,改为模态页面显示动画结束后触发。 491 492**API Level** 493 49410 495 496**变更发生版本** 497 498从OpenHarmony SDK 5.0.0.19 版本开始。 499 500**变更的接口/组件** 501 502受影响的组件:全屏模态转场、半模态转场 503 504API 12之前,全屏模态转场/半模态转场的onAppear回调会在模态页面显示动画开始前触发 505 506 507 508 509 510API 12及之后,全屏模态转场/半模态转场的onAppear回调会在模态页面显示动画结束后触发 511 512 513 514 515 516**适配指导** 517 518如有需要在模态页面显示动画开始前执行的逻辑,可以使用API 12新增的onWillAppear回调替代onAppear回调,请查阅[半模态转场](../../../application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-sheet-transition.md)文档进行适配。 519 520## cl.arkui.9 Tabs组件底部页签样式去除按压态动效,默认高度变更为52vp 521 522**访问级别** 523 524公开接口 525 526**变更原因** 527 528UX设计优化 529 530**变更影响** 531 532该变更为兼容性变更。 533 534API version 12开始,Tabs组件底部页签样式去除按压态动效,默认高度从56vp变更为52vp 535 536**起始API Level** 537 5389 539 540**变更发生版本** 541 542从OpenHarmony SDK 5.0.0.19 版本开始。 543 544**示例:** 545API version 12之前, Tabs组件底部页签样式, 默认高度为56vp, 点击时有按压态动效 546 547 548 549API version 12开始, Tabs组件底部页签样式, 默认高度为52vp, 点击时无按压态动效 550 551 552 553**变更的接口/组件** 554 555Tabs组件 556 557**适配指导** 558 559UX默认行为变更,无需适配,但应注意变更后的默认效果是否符合开发者预期, 如不符合则应自定义修改效果控制变量以达到预期 560 561## cl.arkui.10 SubHeader组件边距、超长显示规则等默认样式变更。 562 563**访问级别** 564 565公开接口 566 567**变更原因** 568 569UX样式变更 570 571**变更影响** 572 573该变更为非兼容性变更,只影响SubHeader组件的默认样式。 574 575- 变更前 576 1. SubHeader组件左右边距24vp。 577 2. SubHeader组件一级标题字重Medium,二级标题超长缩小字号,最小14号。 578 3. SubHeader组件显示规则:组件优先展示左侧内容信息。 579 <br/> 580 581- 变更后 582 1. SubHeader组件左右边距16vp。 583 2. SubHeader组件一级标题字重Bold,二级标题超长不缩小字号。 584 3. SubHeader组件显示规则:组件右侧默认占据整体组件宽度的1/3,左侧默认占据整体组件宽度的2/3。 585 586 如下图所示为变更前后效果对比: 587 588 | 变更前 | 变更后 | 589|---------|---------| 590|  |  | 591 592**起始API Level** 593 59410 595 596**变更发生版本** 597 598从OpenHarmony SDK 5.0.0.19 版本开始。 599 600**变更的接口/组件** 601 602SubHeader组件。 603 604**适配指导** 605 606UX默认行为变更,无需适配,但应注意变更后的默认效果是否符合开发者预期,如不符合则应自定义修改效果控制变量以达到预期。 607 608## cl.arkui.11 advanced.Dialog组件弹窗内边距、标题字重、对齐方式等默认样式变更 609 610**访问级别** 611 612公开接口 613 614**变更原因** 615 616UX样式变更 617 618**变更影响** 619 620该变更为非兼容性变更,只影响弹窗的默认样式,默认样式随系统风格变更。 621 622- 变更前 623 1. 弹窗内上边距为24vp,主标题字重为FontWeight.Medium。 624 2. 弹窗标题对齐方式为左对齐。 625 3. TipsDialog图片默认展示为充满边界。 626 627 <br/> 628- 变更后 629 1. 弹窗内上边距为8vp,主标题字重为FontWeight.Bold。 630 2. 弹窗标题对齐方式为居中对齐。 631 3. 优化图片显示规则,优先保证显示比例。 632 633 如下图所示为变更前后效果对比: 634 635 | 变更前 | 变更后 | 636|---------|---------| 637|  |  | 638 639**起始API Level** 640 64110 642 643**变更发生版本** 644 645从OpenHarmony SDK 5.0.0.19 版本开始。 646 647**变更的接口/组件** 648 649advanced.Dialog.TipsDialog,advanced.Dialog.SelectDialog,advanced.Dialog.AlertDialog,advanced.Dialog.LoadingDialog 650 651**适配指导** 652 653UX默认行为变更,无需适配,但应注意变更后的默认效果是否符合开发者预期,如不符合则应自定义修改效果控制变量以达到预期。 654 655## cl.arkui.12 分段按钮组件选中项底板默认阴影效果样式变更 656 657**访问级别** 658 659公开接口 660 661**变更原因** 662 663修正视觉效果以获得更好的用户体验。 664 665**变更影响** 666 667该变更为非兼容性变更,只影响选中按钮的底板阴影效果。 668 669- 变更前 670 1. 底板阴影效果为ShadowStyle.OUTER_DEFAULT_MD。 671 672- 变更后 673 1. 底板阴影效果为ShadowStyle.OUTER_DEFAULT_XS。 674 675 如下图所示为变更前后效果对比: 676 677 | 变更前 | 变更后 | 678|---------|---------| 679|  |  | 680 681**起始API Level** 682 68311 684 685**变更发生版本** 686 687从OpenHarmony SDK 5.0.0.19 版本开始。 688 689**变更的接口/组件** 690 691SegmentButton 692 693**适配指导** 694 695默认行为变更,无需适配,但应注意变更后的行为是否对整体应用逻辑产生影响。