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![dialog change](figures/dialog_changelog.png)
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.showDialogpromptAction.openCustomDialog、AlertDialog、ActionSheet、DatePickerDialog、TimePickerDialog、TextPickerDialog、CustomDialog。
36
37**适配指导**
38
39若开发者需要弹窗内容不避让导航条,可设置aligment为DialogAligment.Bottomoffset.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&lt;any&gt;变更为Array&lt;[ResourceColor, number]&gt;
120
121**访问级别**
122
123公开接口
124
125**变更原因**
126
127any类型过于宽泛,从api上没有引导开发者使用正确的参数类型。
128
129**变更影响**
130
131该变更为非兼容性变更。
132
133变更前:允许将linearGradient、sweepGradient、radialGradient通用属性及LinearGradient interface中的colors参数定义为Array&lt;any&gt;类型。
134
135变更后:如果使用了与Array&lt;[ResourceColor, number]&gt;不兼容的colors参数类型,如Array&lt;any&gt;,编译报错。
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&lt;[ResourceColor, number]&gt;兼容的类型。
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&lt;[ResourceColor, number]&gt; = [[0xff0000, 0.0], [0x0000ff, 0.3], [0xffff00, 1.0]].
168
169## cl.arkui.3 sweepGradient、radialGradient通用属性的center参数类型从Array&lt;any&gt;变更为[Length, Length]
170
171**访问级别**
172
173公开接口
174
175**变更原因**
176
177any类型过于宽泛,从api上没有引导开发者使用正确的参数类型,也没有从api上约束center的长度为2。
178
179**变更影响**
180
181该变更为非兼容性变更。
182
183变更前:允许将sweepGradient、radialGradient通用属性的center参数类型定义为Array&lt;any&gt;类型。
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![handler color change](figures/handler_color_changelog.png)
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![模态显示回调时序图](figures/oldOpenSheet.png)
507
508![模态回退回调时序图](figures/oldCloseSheet.png)
509
510API 12及之后,全屏模态转场/半模态转场的onAppear回调会在模态页面显示动画结束后触发
511
512![模态显示回调时序图](figures/newOpenSheet.png)
513
514![模态回退回调时序图](figures/newCloseSheet.png)
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![底部页签动效图](figures/oldBottomTabBar.gif)
548
549API version 12开始, Tabs组件底部页签样式, 默认高度为52vp, 点击时无按压态动效
550
551![底部页签动效图](figures/newBottomTabBar.gif)
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| ![](figures/SubHeader_Margin_Before.png) |  ![](figures/SubHeader_Margin_After.png) |
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.Medium624  2. 弹窗标题对齐方式为左对齐。
625  3. TipsDialog图片默认展示为充满边界。
626
627  <br/>
628- 变更后
629  1. 弹窗内上边距为8vp,主标题字重为FontWeight.Bold630  2. 弹窗标题对齐方式为居中对齐。
631  3. 优化图片显示规则,优先保证显示比例。
632
633  如下图所示为变更前后效果对比:
634
635 | 变更前 | 变更后 |
636|---------|---------|
637| ![](figures/SelectDialog_Before.png)  |  ![](figures/SelectDialog_After.png)  |
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_MD671
672- 变更后
673  1. 底板阴影效果为ShadowStyle.OUTER_DEFAULT_XS674
675  如下图所示为变更前后效果对比:
676
677 | 变更前 | 变更后 |
678|---------|---------|
679| ![](figures/SegmentButton_Before.png)  |  ![](figures/SegmentButton_After.png)  |
680
681**起始API Level**
682
68311
684
685**变更发生版本**
686
687从OpenHarmony SDK 5.0.0.19 版本开始。
688
689**变更的接口/组件**
690
691SegmentButton
692
693**适配指导**
694
695默认行为变更,无需适配,但应注意变更后的行为是否对整体应用逻辑产生影响。