1# ArkUI子系统Changelog
2
3## cl.arkui.1 自定义组件struct装饰器校验信息优化
4
5**访问级别**
6
7公开接口
8
9**变更原因**
10
11之前的报错信息存在冗余,不易理解。
12
13**变更影响**
14
15该变更为兼容性变更。
16
17变更前:
18输出一个警告(WARN)和一个错误(ERROR)日志信息。
19```
20WARN: ArkTS:WARN File: xx
21A struct should use decorator '@Component' or '@ComponentV2'.
22ERROR: ArkTS:ERROR File:xx
23'TestComponent()' does not meet UI component syntax.
24```
25
26变更后:
27如果struct没有被(@Entry/@Preview/@ComponentV2/@Component/@CustomDialog/@Reusable)其中一个装饰器装饰,编译报错,只有一个错误(ERROR)日志信息。
28```
29ERROR: ArkTS:ERROR File:xx
30Decorator '@Component', '@ComponentV2', or '@CustomDialog' is missing for struct 'TestComponent'.
31```
32错误示例如下:
33```ts
34struct Child {
35  build() {
36    Column() {
37      Text("hello Child")
38    }
39  }
40}
41
42@Entry
43@Component
44struct Child {
45  build() {
46    Column() {
47      Child()
48    }
49  }
50}
51```
52
53**起始API Level**
54
55不涉及API变更
56
57**变更发生版本**
58
59从OpenHarmony SDK 5.0.0.28开始。
60
61**适配指导**
62
63如果应用代码未发生变化,则不需要适配。
64## cl.arkui.2 增加方法装饰器的校验
65
66**访问级别**
67
68公开接口
69
70**变更原因**
71
72当开发者错误的使用多个方法装饰器装饰在同一个方法上时,会导致运行时异常,需要在编译阶段提前拦截。
73
74**变更影响**
75
76该变更为非兼容性变更。
77
78变更前:
79当不同的方法装饰器装饰在同一个方法时,编译无日志提示信息。
80
81变更后:
82当不同的方法装饰器装饰在同一个方法时,编译输出报错提示信息。
83```
84ERROR: ArkTS:ERROR File:xx
85A function can only be decorated by one of the 'AnimatableExtend, Builder, Extend, Styles and Concurrent'.
86ERROR: ArkTS:ERROR File:xx
87The member property or method can not be decorated by multiple built-in decorators.
88```
89
90错误示例如下:
91```ts
92@Builder
93@Styles
94function testFunc() {
95  Text("hello testFunc")
96}
97
98@Component
99struct TestComponent {
100
101  @Builder
102  @Styles
103  testMethod() {
104    Text("hello testMethod")
105  }
106
107  build() {
108    Column() {
109      Text("hello TestComponent")
110    }
111  }
112}
113```
114
115变更前:
116当相同的内置方法装饰器(@AnimatableExtend/@Builder/@Extend/@Styles/@Concurrent)装饰在同一个方法时,编译无日志提示信息。
117
118变更后:
119当相同的内置方法装饰器(@AnimatableExtend/@Builder/@Extend/@Styles/@Concurrent)装饰在同一个方法时,编译输出警告日志提示信息。
120```
121WARN: ArkTS:WARN File: xx
122Duplicate decorators for function are not allowed.
123```
124
125错误示例如下:
126```ts
127@Builder
128@Builder
129function testFunc() {
130  Text("hello testFunc")
131}
132```
133
134**起始API Level**
135
136不涉及API变更
137
138**变更发生版本**
139
140从OpenHarmony SDK 5.0.0.28开始。
141
142**适配指导**
143
144如果开发者不按规范使用对应范式,则需按日志提示信息进行修改。
145
146## cl.arkui.3 bindPopup在窗口失焦后不消失
147
148**访问级别**
149
150公开接口
151
152**变更原因**
153
154开发者不希望popup所在的窗口失去焦点后,popup会自动消失
155
156**变更影响**
157
158该变更为非兼容性变更。
159
160变更前:
161popup所在窗口失焦时,popup会自动消失。
162
163变更后:
164popup所在窗口失焦时,popup不会自动消失。
165
166
167**起始API Level**
168
169不涉及API变更
170
171**变更发生版本**
172
173从OpenHarmony SDK 5.0.0.28开始。
174
175**适配指导**
176
177气泡的关闭需要用户自行决定。如果出现之前版本某一操作后popup消失,现版本不消失的现象时,用户可以检查现象前后窗口焦点是否发生了变化,如果发生变化,现版本需要用户自行将isShow属性设置为false来关闭popup。
178
179## cl.arkui.4 TextInput/TextArea组件设置宽度为auto时,最小值为16vp
180
181**访问级别**
182
183公开接口
184
185**变更原因**
186
187TextInput/TextArea组件设置宽度为auto并且内容为空时,组件消失。
188
189**变更影响**
190
191该变更为兼容性变更。
192
193变更前:
194TextInput/TextArea组件设置宽度为auto并且内容为空时,组件消失。
195
196变更后:
197TextInput/TextArea组件设置宽度为auto并且内容为空时,组件最小宽度为16vp。
198
199**起始API Level**
200
201不涉及API变更
202
203**变更发生版本**
204
205从OpenHarmony SDK 5.0.0.28开始。
206
207**适配指导**
208
209默认行为变更,无需适配,但应注意变更后的行为是否对整体应用逻辑产生影响。
210
211## cl.arkui.5 TextInput/TextArea组件设置为内联模式时,最小值为16vp
212
213**访问级别**
214
215公开接口
216
217**变更原因**
218
219TextInput/TextArea组件设置为内联模式并且内容为空时,组件消失。
220
221**变更影响**
222
223该变更为兼容性变更。
224
225变更前:
226TextInput/TextArea组件设置为内联模式并且内容为空时,组件消失。
227
228变更后:
229TextInput/TextArea组件设置为内联模式并且内容为空时,组件最小宽度为16vp。
230
231**起始API Level**
232
233不涉及API变更
234
235**变更发生版本**
236
237从OpenHarmony SDK 5.0.0.28开始。
238
239**适配指导**
240
241默认行为变更,无需适配,但应注意变更后的行为是否对整体应用逻辑产生影响。
242
243## cl.arkui.6 TextInput/TextArea组件在2in1设备上通过双击弹出菜单时,点击全选,菜单消失
244
245**访问级别**
246
247公开接口
248
249**变更原因**
250
251TextInput/TextArea组件在2in1上通过双击弹出菜单时,点击全选,此时无需菜单弹出。
252
253**变更影响**
254
255该变更为兼容性变更。
256
257变更前:
258TextInput/TextArea组件在2in1上通过双击弹出菜单时,点击全选,此时菜单弹出。
259
260变更后:
261TextInput/TextArea组件在2in1上通过双击弹出菜单时,点击全选,此时菜单消失。
262
263**起始API Level**
264
265不涉及API变更
266
267**变更发生版本**
268
269从OpenHarmony SDK 5.0.0.28开始。
270
271**适配指导**
272
273默认行为变更,无需适配,但应注意变更后的行为是否对整体应用逻辑产生影响。
274
275## cl.arkui.7 Menu组件默认样式变更
276
277**访问级别**
278
279公开接口
280
281**变更原因**
282
283优化menu组件的视觉体验。
284
285**变更影响**
286
287该变更为非兼容性变更。
288
289**变更前:**
290
291![](figures/Menu_Before.png)
292
293菜单列表的左右padding默认为0
294
295菜单项文本字重默认为regular
296
297菜单组件圆角大小默认为16vp
298
299对于带标题的菜单列表,标题文本大小默认为16fp
300
301对于带标题的菜单列表,标题文本颜色默认为#89000000
302
303对于带标题的菜单列表,标题文本字重默认为normal
304
305**变更后:**
306
307![](figures/Menu_After.png)
308
309菜单列表的左右padding默认为16vp
310
311菜单项文本字重默认为medium
312
313菜单组件圆角大小默认为20vp
314
315对于带标题的菜单列表,标题文本大小默认为18fp
316
317对于带标题的菜单列表,标题文本颜色默认为#FF000000
318
319对于带标题的菜单列表,标题文本字重默认为bold
320
321
322**起始API Level**
323
3249
325
326**变更发生版本**
327
328从OpenHarmony SDK 5.0.0.28开始。
329
330**适配指导**
331
332默认效果变更,无需适配,但应注意变更后的默认效果是否符合开发者预期,如不符合则应自定义修改效果控制变量以达到预期。
333
334## cl.arkui.8 chipGroup不设置items属性的异常处理
335
336**访问级别**
337
338公开接口
339
340**变更原因**
341
342chipGroup组件在使用过程中,对于必填属性items,不设置时DevEco Studio是否抛出异常。
343
344**变更影响**
345
346该变更为非兼容性变更。
347
348变更前:必填属性items,不设置时DevEco Studio不报错。
349
350变更后:必填属性items,不设置时DevEco Studio抛出异常告警。
351
352**起始API Level**
353
35412
355
356**变更发生版本**
357
358从OpenHarmony SDK 5.0.0.28开始。
359
360**适配指导**
361
362使用chipGroup组件时,如果不设置必填属性items,则需按日志提示信息进行修改。
363
364## cl.arkui.9 ListItem横滑跟手比变更
365
366**访问级别**
367
368公开接口
369
370**变更原因**
371
372ListItem横滑动态跟手比计算公式,需要与其他场景(例如:List拖动过界)的公式一致。
373
374**变更影响**
375
376该变更为不兼容变更。
377
378ListItem横滑动态跟手比按新实现后,手指滑动相同距离,组件滑动距离会变大。
379
380**起始API Level**
381
3829
383
384**变更发生版本**
385
386从OpenHarmony SDK 5.0.0.28开始。
387
388**适配指导**
389
390默认效果变更,无需适配。
391
392## cl.arkui.10 DrawableDescriptor显示效果
393
394**访问级别**
395
396公开接口
397
398**变更原因**
399
400对原来非标准288x288图标的裁切行为做统一变更,提高用户体验。
401
402**变更影响**
403
404该变更为不兼容性变更。
405
406对于非288x288尺寸前景图片,当前生成的分层图标按照缩放后裁剪显示,288x288尺寸前景图片保持原规格。
407
408**起始API Level**
409
41010
411
412**变更发生版本**
413
414从OpenHarmony SDK 5.0.0.28开始。
415
416**适配指导**
417
418默认效果变更:默认效果变更,无需适配,但应注意变更后的默认效果是否符合开发者预期,如不符合则应自定义修改效果控制变量以达到预期。
419
420## cl.arkui.11 TipsDialog的imageRes/imageSize/title变更
421
422**访问级别**
423
424公开接口
425
426**变更原因**
427
428TipsDialog 原来只支持 resource 类型的图片,现扩展 TipsDialog 支持 pixelMap 和 string 类型的图片,方便用户根据使用场景选用图片类型,提升用户使用体验。同时变更 TipsDialog 图片大小和中间标题由必填改为非必填,方便用户根据使用场景决定是否选用默认样式。
429
430**变更影响**
431
432该变更为不兼容变更。
433
434变更前:
4351. TipsDialog不支持pixelMap和string类型的图片
4362. TipsDialog的图片大小为必填
4373. TipsDialog必须有中间标题
438
439变更后:
4401. TipsDialog支持pixelMap和string类型的图片
4412. TipsDialog图片大小非必填,默认大小64vp*64vp
4423. TipsDialog中间标题可为非必填,未填不展示标题
443
444**起始API Level**
445
446API 12
447
448**变更发生版本**
449
450从OpenHarmony SDK 5.0.0.28开始。
451
452**适配指导**
453
454TipsDialg组件创建函数变更:无需适配,但应注意变更后的属性范围扩展是否符合开发者预期,如不符合可具体参考:
455```ts
456import { TipsDialog } from '@kit.ArkUI';
457
458@Entry
459@Component
460struct Index {
461  isChecked = false;
462  dialogControllerImage: CustomDialogController = new CustomDialogController({
463    builder: TipsDialog({
464      imageRes: $r('sys.media.ohos_ic_public_voice'),
465      content: '想要卸载这个APP嘛?',
466      primaryButton: {
467        value: '取消',
468        action: () => {
469          console.info('Callback when the first button is clicked')
470        },
471      },
472      secondaryButton: {
473        value: '删除',
474        role: ButtonRole.ERROR,
475        action: () => {
476          console.info('Callback when the second button is clicked')
477        }
478      },
479      onCheckedChange: () => {
480        console.info('Callback when the checkbox is clicked')
481      }
482    }),
483  })
484
485  build() {
486    Row() {
487      Stack() {
488        Column(){
489          Button("上图下文弹出框")
490            .width(96)
491            .height(40)
492            .onClick(() => {
493              this.dialogControllerImage.open()
494            })
495        }.margin({bottom: 300})
496      }.align(Alignment.Bottom)
497      .width('100%').height('100%')
498    }
499    .backgroundImageSize({ width: '100%', height: '100%' })
500    .height('100%')
501  }
502}
503```
504
505## cl.arkui.12 ChipGroup组件items拓展参数类型支持SymbolGlyphModifier
506
507**访问级别**
508
509公开接口
510
511**变更原因**
512
513ChipGroup组件设置IconGroupSuffix的items参数原来只支持image类型的图片,现扩展支持HM Symbol资源设置,方便用户使用资源更加丰富的Symbol库,提升用户使用体验。
514
515**变更影响**
516
517该变更为不兼容变更。
518
519变更前:
520IconGroupSuffix的参数items类型是Array\<IconItemOptions>,支持用户传参image类型的图标。
521
522变更后:
523IconGroupSuffix的参数items类型是Array\<IconItemOptions | SymbolGlyphModifier>,支持用户传参image类型或者symbol类型的图标。
524
525**起始API Level**
526
527API 12
528
529**变更发生版本**
530
531从OpenHarmony SDK 5.0.0.28开始。
532
533**变更的接口/组件**
534
535[@ohos.arkui.advanced.ChipGroup.d.ets](https://gitee.com/openharmony/interface_sdk-js/blob/master/api/@ohos.arkui.advanced.ChipGroup.d.ets)中如下接口:
536
537items: Array<IconItemOptions | SymbolGlyphModifier>;
538
539**适配指导**
540
541ChipGroup创建IconGroupSuffx变更:无需适配,开发者可以根据需要设置image或者symbol图标,如要使用symbol图标,可以参考以下示例:
542```ts
543import { ChipSize, ChipGroup, IconGroupSuffix, SymbolGlyphModifier } from '@kit.ArkUI'
544
545@Entry
546@Preview
547@Component
548struct Index {
549  @State selected_index: Array<number> = [0, 1, 2, 3, 4, 5, 6];
550  @State selected_state: boolean = true;
551  @State prefixModifierNormal: SymbolGlyphModifier = new SymbolGlyphModifier($r('sys.symbol.ohos_star'));
552  @State prefixModifierActivated: SymbolGlyphModifier = new SymbolGlyphModifier($r('sys.symbol.ohos_star')).fontColor([Color.Red]);
553  @State suffixModifierNormal: SymbolGlyphModifier = new SymbolGlyphModifier($r('sys.symbol.ohos_wifi'));
554  @State suffixModifierActivated: SymbolGlyphModifier = new SymbolGlyphModifier($r('sys.symbol.ohos_wifi')).fontColor([Color.Red]);
555
556  @LocalBuilder
557  ChipGroupSuffix(): void {
558    IconGroupSuffix({
559      items: [
560        new SymbolGlyphModifier($r('sys.symbol.magnifyingglass'))
561          .onClick(() => {
562            if (this.selected_state == false) {
563              this.selected_index = [0, 1, 2, 3, 4, 5, 6];
564              this.selected_state = true;
565            } else {
566              this.selected_index = [];
567              this.selected_state = false;
568            }
569          })
570      ]
571    })
572  }
573
574  build() {
575    Column() {
576      ChipGroup({
577        items: [
578          {
579            prefixSymbol: { normal: this.prefixModifierNormal, activated: this.prefixModifierActivated },
580            label: { text: "操作块1" },
581            suffixSymbol: { normal: this.suffixModifierNormal, activated: this.suffixModifierActivated },
582            allowClose: false,
583          },
584          {
585            prefixSymbol: { normal: this.prefixModifierNormal, activated: this.prefixModifierActivated },
586            label: { text: "操作块2" },
587            allowClose: true,
588          },
589          {
590            prefixIcon: { src: $r('sys.media.ohos_ic_public_clock') },
591            label: { text: "操作块3" },
592            allowClose: true,
593          },
594          {
595            prefixIcon: { src: $r('sys.media.ohos_ic_public_cast_stream') },
596            label: { text: "操作块4" },
597            allowClose: true,
598          },
599          {
600            prefixIcon: { src: $r('sys.media.ohos_ic_public_cast_mirror') },
601            label: { text: "操作块5" },
602            allowClose: true,
603          },
604          {
605            prefixIcon: { src: $r('sys.media.ohos_ic_public_cast_stream') },
606            label: { text: "操作块6" },
607            allowClose: true,
608          },
609        ],
610        itemStyle: {
611          size: ChipSize.NORMAL,
612          backgroundColor: $r('sys.color.ohos_id_color_button_normal'),
613          fontColor: $r('sys.color.ohos_id_color_text_primary'),
614          selectedBackgroundColor: $r('sys.color.ohos_id_color_emphasize'),
615          selectedFontColor: $r('sys.color.ohos_id_color_text_primary_contrary'),
616        },
617        selectedIndexes: this.selected_index,
618        multiple: true,
619        chipGroupSpace: { itemSpace: 8, endSpace: 0 },
620        chipGroupPadding: { top: 10, bottom: 10 },
621        onChange: (activatedChipsIndex: Array<number>) => {
622          console.log('chips on clicked, activated index ' + activatedChipsIndex)
623        },
624        suffix: this.ChipGroupSuffix
625      })
626    }
627  }
628}
629```