• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# ArkUI子系统Changelog
2
3## cl.arkui.1 弹窗类组件适配系统窗口安全区
4
5**访问级别**
6
7公开接口
8
9**变更原因**
10
11系统类型窗口下,弹窗类组件未避让安全区,导致弹窗显示内容与状态栏、导航条发生重叠
12
13**变更影响**
14
15该变更不涉及应用适配
16
17变更前:系统类型窗口下,弹窗类组件未避让安全区,显示内容与状态栏、导航条重叠
18
19变更后:系统类型窗口下,弹窗类组件避让安全区,显示内容与状态栏、导航条不重叠
20
21
22| 组件 | 变更前 | 变更后 |
23| :---: | :---: | :---: |
24| Menu (无预览图) | <img width=150px src="figures/avoidSafeArea/menu1_1.png"> <br> <img width=150px src="figures/avoidSafeArea/menu2_1.png"> | <img width=150px src="figures/avoidSafeArea/menu1_2.png"> <br> <img width=150px src="figures/avoidSafeArea/menu2_2.png"> |
25| Menu (有预览图) | <img width=150px src="figures/avoidSafeArea/menu3_1.png"> <br> <img width=150px src="figures/avoidSafeArea/menu4_1.png"> | <img width=150px src="figures/avoidSafeArea/menu3_2.png"> <br> <img width=150px src="figures/avoidSafeArea/menu4_2.png"> |
26| Popup | <img width=150px src="figures/avoidSafeArea/popup1_1.png"> <br> <img width=150px src="figures/avoidSafeArea/popup2_1.png"> | <img width=150px src="figures/avoidSafeArea/popup1_2.png"> <br> <img width=150px src="figures/avoidSafeArea/popup2_2.png"> |
27| Dialog | <img width=150px src="figures/avoidSafeArea/dialog1_1.png"> <br> <img width=150px src="figures/avoidSafeArea/dialog2_1.png"> | <img width=150px src="figures/avoidSafeArea/dialog1_2.png"> <br> <img width=150px src="figures/avoidSafeArea/dialog2_2.png"> |
28| Toast | <img width=150px src="figures/avoidSafeArea/toast1_1.png"> <br> <img width=150px src="figures/avoidSafeArea/toast2_1.png"> | <img width=150px src="figures/avoidSafeArea/toast1_2.png"> <br> <img width=150px src="figures/avoidSafeArea/toast2_2.png"> |
29
30**起始API Level**
31
32Menu: API 7
33
34Popup: API 7
35
36Dialog: API 7
37
38Toast: API 9
39
40**变更发生版本**
41
42从OpenHarmony SDK 5.1.0.50开始。
43
44**变更的接口/组件**
45
46Menu组件、Dialog组件、Popup组件、Toast组件。
47
48**适配指导**
49
50默认避让行为变更,无需适配,但应注意变更后的默认效果是否符合开发者预期,如不符合则应自定义修改效果控制变量以达到预期。
51
52## cl.arkui.2 轴事件支持BEGIN、END及CANCEL类型回调触发
53
54**访问级别**
55
56公开接口
57
58**变更原因**
59
60开发者无法监听到轴事件的BEGIN、END、CANCEL类型的事件回调。
61
62**变更影响**
63
64此变更不涉及应用适配。
65
66变更前:开发者通过OH_NativeXComponent_RegisterUIInputEventCallback接口监听轴事件回调,无法收到BEGIN、END、CANCEL类型的事件回调。
67
68变更后:开发者通过OH_NativeXComponent_RegisterUIInputEventCallback接口监听轴事件回调,可以收到BEGIN、END、CANCEL类型的事件回调。
69
70**起始API Level**
71
72API 12
73
74**变更发生版本**
75
76从OpenHarmony SDK 5.1.0.50开始。
77
78**变更的接口/组件**
79
80OH_NativeXComponent_RegisterUIInputEventCallback接口。
81
82**适配指导**
83
84默认行为变更,无需适配。
85
86## cl.arkui.3  CanvasRenderingContext2D的drawImage接口联合阴影绘制由阴影无法正确绘制变更为阴影正确绘制
87
88**访问级别**
89
90公开接口
91
92**变更原因**
93
94drawImage同名接口根据传入参数的不同,视为不同方法。当drawImage传入image、dx和dy三个参数,且与阴影颜色(shadowColor)、阴影偏置距离(shadowOffsetX和shadowOffsetY)联合绘制时,阴影无法正确绘制。变更后,阴影可以正确绘制。
95
96**变更影响**
97
98该变更涉及应用适配。
99
100- 变更前:当drawImage接口传入image、dx和dy三个参数,且与阴影进行联合绘制时,阴影无法正确绘制。
101- 变更后:当drawImage接口传入image、dx和dy三个参数,且与阴影进行联合绘制时,阴影可以正确绘制。
102
103|               变更前                |              变更后               |
104| :---------------------------------: | :-------------------------------: |
105| ![](figures/drawImage_without_shadow.jpg) | ![](figures/drawImage_with_shadow.jpg) |
106
107**起始API Level**
108
1099
110
111**变更发生版本**
112
113从OpenHarmony SDK 5.1.0.50 版本开始。
114
115**变更的接口/组件**
116
117CanvasRenderingContext2D的drawImage接口
118
119**适配指导**
120
121变更后,使用drawImage接口与阴影进行联合绘制时,阴影能够被正确绘制。
122
123**示例**
124
125```ts
126@Entry
127@Component
128struct Page1 {
129  private settings: RenderingContextSettings = new RenderingContextSettings(true)
130  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
131  private img: ImageBitmap = new ImageBitmap("common/images/example.png")
132
133  build() {
134    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
135      Canvas(this.context)
136        .width('100%')
137        .height('100%')
138        .onReady(() => {
139          this.context.shadowColor = "rgb(213,213,213)"
140          this.context.shadowOffsetX = 40
141          this.context.shadowOffsetY = 40
142          this.context.drawImage(this.img, 20, 20)
143        })
144    }
145    .width('100%')
146    .height('100%')
147  }
148}
149```
150
151## cl.arkui.4  CanvasRenderingContext2D的measureText接口测算文本的结果变更
152
153**访问级别**
154
155公开接口
156
157**变更原因**
158
159在运用measureText接口进行文本尺寸测量时,在下述场景1与场景2中,所测得的文本宽度呈现异常值:
160- 场景1:当Context与某一Canvas解除绑定后,再与另一Canvas重新绑定时,若未重新设定font属性,或在重新设定font属性时遗漏了font-size的指定,那么在绘制文本时将采用重置后的font-size(即默认值)。然而,在进行文本尺寸测量时,系统会错误地沿用前一Canvas中设定的font-size,从而导致文本宽度测量结果出现偏差。
161- 场景2:在font属性的设定过程中,若首次已明确指定font-style,而第二次设定了不同的font-style,虽然在绘制文本时会采用新设定的font-style,但在进行文本尺寸测量时,系统却依旧沿用上一次设定的font-style,同样造成文本宽度测量结果的不准确。
162
163**变更影响**
164
165该变更不涉及应用适配。
166
167使用measureText接口进行文本测算时:
168
169- 变更前:在场景1和场景2中,文本测算得到的文本宽度均为错误值。
170- 变更后:在场景1和场景2中,文本测算得到的文本宽度均为正确值。
171
172运行场景1的示例:
173
174```ts
175@Entry
176@Component
177struct example1 {
178  private settings: RenderingContextSettings = new RenderingContextSettings(true)
179  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
180  @State flag: boolean = false
181
182  build() {
183    Column() {
184      Button('transfer')
185        .position({x:200, y:0})
186        .width(100)
187        .height(40)
188        .onClick(() => {
189          this.flag = !this.flag
190        })
191      Canvas(this.context)
192        .position({x:100, y:45})
193        .width('300')
194        .height('100')
195        .backgroundColor('rgb(39,135,237)')
196        .onReady(() => {
197          this.context.textAlign = 'center'
198          this.context.font = '20vp'
199          this.context.fillText('width:' + this.context.measureText('Hello World').width, this.context.width/2, 30)
200        })
201      if (this.flag) {
202        Canvas(this.context)
203          .position({x:100, y:145})
204          .width('300')
205          .height('100')
206          .backgroundColor('rgb(213,213,213)')
207          .onReady(() => {
208            this.context.textAlign = 'center'
209            this.context.fillText('width:' + this.context.measureText('Hello World').width, this.context.width/2, 30)
210          })
211      }
212    }
213    .width('100%')
214    .height('100%')
215  }
216}
217```
218
219|                   变更前                   |                 变更后                  |
220| :----------------------------------------: | :-------------------------------------: |
221| ![](figures/measureText_1.gif) | ![](figures/measureText_2.gif) |
222
223运行场景2的示例:
224
225```ts
226@Entry
227@Component
228struct example2 {
229  private settings: RenderingContextSettings = new RenderingContextSettings(true)
230  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
231
232  build() {
233    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
234      Canvas(this.context)
235        .width('100%')
236        .height('100%')
237        .backgroundColor('rgb(255,192,0)')
238        .onReady(() => {
239          this.context.font = 'italic 25vp'
240          this.context.fillText('width:' + this.context.measureText('Hello World').width, 10, 50)
241          this.context.font = 'normal'
242          this.context.fillText('width:' + this.context.measureText('Hello World').width, 10, 100)
243        })
244    }
245    .width('100%')
246    .height('100%')
247  }
248}
249```
250
251|                   变更前                   |                 变更后                  |
252| :----------------------------------------: | :-------------------------------------: |
253| ![](figures/measureText_3.jpg) | ![](figures/measureText_4.jpg) |
254
255**起始API Level**
256
2579
258
259**变更发生版本**
260
261从OpenHarmony SDK 5.1.0.50 版本开始。
262
263**变更的接口/组件**
264
265CanvasRenderingContext2D的measureText接口
266
267**适配指导**
268
269无需适配,但应注意变更后的行为是否对整体应用逻辑产生影响。
270
271## cl.arkui.5 CanvasRenderingContext2D的miterLimit接口,当传入参数为0时,其异常值的处理方式发生变更
272
273**访问级别**
274
275公开接口
276
277**变更原因**
278
279CanvasRenderingContext2D的miterLimit接口,当传入参数为0时,未按照默认值设置参数,与文档所规定的处理异常值的方式不符。
280
281**变更影响**
282
283该变更涉及应用适配。
284
285|               变更前                |              变更后               |
286| :---------------------------------: | :-------------------------------: |
287| 当传入参数0为时,未按照默认值进行参数设置。<br>![](figures/miterLimit_1.jpeg) | 当传入参数为0时,按照默认值进行参数设置。<br>![](figures/miterLimit_2.jpeg) |
288
289**起始API Level**
290
2919
292
293**变更发生版本**
294
295从OpenHarmony SDK 5.1.0.50 版本开始。
296
297**变更的接口/组件**
298
299CanvasRenderingContext2D的miterLimit接口
300
301**适配指导**
302
303变更后,使用miterLimit接口,当传入参数0为时,按照默认值进行参数设置,即miterLimit被设置为10。
304
305**示例**
306
307```ts
308@Entry
309@Component
310struct MiterLimit {
311  private settings: RenderingContextSettings = new RenderingContextSettings(true)
312  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
313
314  build() {
315    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
316      Canvas(this.context)
317        .width('100%')
318        .height('100%')
319        .backgroundColor('rgb(213,213,213)')
320        .onReady(() => {
321          this.context.lineWidth = 10
322          this.context.lineJoin = 'miter'
323          this.context.miterLimit = 0
324          this.context.moveTo(50, 30)
325          this.context.lineTo(170, 90)
326          this.context.lineTo(50, 150)
327          this.context.stroke()
328        })
329    }
330    .width('100%')
331    .height('100%')
332  }
333}
334```
335
336## cl.arkui.6 弹出框标题换行优先策略及内容区默认对齐方式变更
337
338**访问级别**
339
340公开接口
341
342**变更原因**
343
344弹窗标题及内容风格优化,增强用户体验。
345
346**变更影响**
347
348此变更不涉及应用适配。
349
350变更点1:弹窗标题超长换行优先规则变更。
351
352| 变更前                                                                                 | 变更后                                                                            |
353|-------------------------------------------------------------------------------------|--------------------------------------------------------------------------------|
354| 弹窗标题超长时,优先缩小字号,最小至9vp,然后再换行展示。<br>  ![变更前](figures/advancedDialog/title_before.png) | 弹窗标题超长时,优先换行,再缩小字号展示,最小至9vp。<br>![变更后](figures/advancedDialog/title_after.png) |
355
356变更点2:弹窗内容超过一行时默认对齐行为变更。
357
358| 变更前                                                                  | 变更后                                                              |
359|----------------------------------------------------------------------|------------------------------------------------------------------|
360| 弹窗内容多行文本时居左对齐。<br> ![变更前](figures/advancedDialog/content_before.png) | 弹窗内容文本居中对齐。<br> ![变更后](figures/advancedDialog/content_after.png) |
361
362**起始API Level**
363
364API 10
365
366**变更发生版本**
367
368从OpenHarmony SDK 5.1.0.50开始。
369
370**变更的接口/组件**
371
372advancedDialog
373
374**适配指导**
375
376默认行为变更,无需适配。系统弹窗默认规格优化演进,若开发者有其他布局、样式诉求,建议使用CustomDialog自定义实现。