• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# ArkUI子系统Changelog
2
3## cl.arkui.1 NavDestination标题栏工具栏支持跟手滑动隐藏后,超过2秒未操作,不恢复显示
4
5**访问级别**
6
7公开接口
8
9**变更原因**
10
11UX规范变更。
12
13**变更影响**
14
15此变更不涉及应用适配。
16
17- 变更前:NavDestination组件的标题栏工具栏上滑隐藏,下滑显示,2s不操作后自动显示。
18
19- 变更后:NavDestination组件的标题栏工具栏上滑隐藏,下滑显示,2s不操作后不会自动显示。
20
21**起始API Level**
22
2314
24
25**变更发生版本**
26
27从OpenHarmony SDK 5.1.0.52开始。
28
29**变更的接口/组件**
30
31NavDestination.bindToScrollable, NavDestination.bindToNestedScrollable
32
33**适配指导**
34
35默认行为变更,无需适配。
36
37## cl.arkui.2 Tabs组件TabBar的显示和隐藏动效变更
38
39**访问级别**
40
41公开接口
42
43**变更原因**
44
45UX规范变更。
46
47**变更影响**
48
49此变更不涉及应用适配。
50
51- 变更前:Tabs组件的TabBar上滑隐藏,下滑显示,2s不操作后自动显示。
52
53- 变更后:Tabs组件的TabBar上滑隐藏,下滑显示,2s不操作后不会自动显示。
54
55**起始API Level**
56
5713
58
59**变更发生版本**
60
61从OpenHarmony SDK 5.1.0.52开始。
62
63**变更的接口/组件**
64
65UIContext的bindTabsToScrollable、bindTabsToNestedScrollable接口
66
67**适配指导**
68
69默认行为变更,无需适配。
70
71## cl.arkui.3 页面退出场景自定义组件删除前移
72
73**访问级别**
74
75公开接口
76
77**变更原因**
78
79在页面退出动画的过程中,UI处于空闲状态。动画结束后,由于释放大量组件导致页面卡顿。可以将页面中自定义组件的释放提前,显著减轻卡顿并优化性能。
80
81**变更影响**
82
83此变更涉及应用适配,仅针对Router和Navigation页面默认的退出动画场景需要适配。
84
85- 变更前:页面退出动画结束后,依次执行自定义组件生命周期aboutToDisappear、onDisappear。
86
87- 变更后:页面退出动画过程中,执行自定义组件生命周期aboutToDisappear。退出动画执行结束后,执行生命周期onDisappear。
88
89**起始API Level**
90
917
92
93**变更发生版本**
94
95从OpenHarmony SDK 5.1.0.52开始。
96
97**变更的接口/组件**
98
99自定义组件的onDisappear生命周期回调。
100
101**适配指导**
102
103在全局复用场景中,当复用的自定义组件的aboutToDisappear生命周期回调中涉及节点移除操作时,应将节点移除操作安排在页面退出完成后,例如onDetach生命周期。
104
105## cl.arkui.4 修复fromHtml接口解析颜色rgb顺序错误的问题
106
107**访问级别**
108
109公开接口
110
111**变更原因**
112
113接口行为与实际规格不符。
114
115**变更影响**
116
117此变更不涉及应用适配。
118
119- 变更前:对于Html代码中的以`#rrggbb`样式表示的颜色,通过fromHtml转换出的属性字符串的字体颜色为`#bbrrgg`。比如html代码中span的颜色为`#0000FF`,转换出的属性字符串的字体颜色为`#FF0000`。
120
121- 变更后:对于Html代码中的以`#rrggbb`样式表示的颜色,通过fromHtml转换出的属性字符串的字体颜色为`#rrggbb`。比如html代码中span的颜色为`#0000FF`,转换出的属性字符串的字体颜色为`#0000FF`。
122
123**起始API Level**
124
12512
126
127**变更发生版本**
128
129从OpenHarmony SDK 5.1.0.52开始,API version 18及以上生效。
130
131**变更的接口/组件**
132
133属性字符串的fromHtml接口。
134
135**适配指导**
136
137此变更不涉及应用适配。
138
139## cl.arkui.5 C API轴事件接口OH_ArkUI_UIInputEvent_GetSourceType和OH_ArkUI_UIInputEvent_GetToolType接口返回值变更
140
141**访问级别**
142
143公开接口
144
145**变更原因**
146
147通过鼠标滚轮或触控板触发的轴事件无法正确获取到触发源设备类型。
148
149**变更影响**
150
151此变更涉及应用适配。
152
153- 变更前:在使用鼠标滚轮或触控板的双指滑动操作时,应用程序无法通过OH_ArkUI_UIInputEvent_GetSourceType和OH_ArkUI_UIInputEvent_GetToolType准确获取触发源的类型,返回值为UNKNOWN。
154
155- 变更后:在使用鼠标滚轮或触控板的双指滑动操作时,应用程序可以通过调用OH_ArkUI_UIInputEvent_GetSourceType和OH_ArkUI_UIInputEvent_GetToolType来获取正确的触发源类型。对于鼠标滚轮操作,获取的SourceType和ToolType均为MOUSE;而针对触控板操作,虽然得到的SourceType仍为MOUSE,但ToolType为TOUCHPAD。
156
157**起始API Level**
158
15915
160
161**变更发生版本**
162
163从OpenHarmony SDK 5.1.0.52开始。
164
165**适配指导**
166
167当应用程序通过native_interface_xcomponent.h中的OH_NativeXComponent_RegisterUIInputEventCallback接口来接收和处理轴事件时,如果回调函数中已使用ToolType类型进行了判断,则无需进一步适配。但如果仅通过UNKNOWN类型处理业务,则需适配,以确保通过具体的目标类型进行区分。
168例如以下示例:
169```cpp
170if (toolType != UI_INPUT_EVENT_TOOL_TYPE_UNKNOWN) {
171    // 应用业务逻辑
172}
173```
174建议以明确的目标类型进行区分,修改为如下代码实现:
175```cpp
176if (toolType != UI_INPUT_EVENT_TOOL_TYPE_MOUSE) { // 是鼠标滚轮尝试的轴事件,数值单位为角度
177    // 鼠标滚轮只有竖向轴,获取滚动角度
178    double degree = OH_ArkUI_AxisEvent_GetVerticalAxisValue(event);
179    // 将角度映射为距离像素值
180    // 控制UI进行位移更新
181} else if (toolType != UI_INPUT_EVENT_TOOL_TYPE_TOUCHPAD) {
182    // 触控板上操作,用户即可横向滑动,也可竖向滑动,需要都获取分量
183    double offsetX = OH_ArkUI_AxisEvent_GetHorizontalAxisValue(event);
184    double offsetY = OH_ArkUI_AxisEvent_GetVerticalAxisValue(event);
185    if (offsetX == 0) {
186        // 横向分量为0,说明为竖向滑动
187        // 处理UI竖向滑动
188    } else {
189        // 横向滑动
190        // 处理UI横向滚动
191    }
192} else {
193    // 异常情况,应忽略
194}
195```
196
197## cl.arkui.6 CanvasRenderingContext2D使用putImageData方法绘制透明度小于1的ImageData效果变更
198
199**访问级别**
200
201公开接口
202
203**变更原因**
204
205使用putImageData方法在屏绘制透明度小于1的ImageData,与clip方法组合使用时效果不正确,与W3C标准不一致。
206
207**变更影响**
208
209| 变更前                                   | 变更后                                   |
210| ---------------------------------------- | ---------------------------------------- |
211| 使用putImageData方法在屏绘制透明度小于1的ImageData,与clip方法组合使用时效果不正确,与W3C标准不一致。<br>![putImageData_before](figures/putImageData_before.png) | 使用putImageData方法在屏绘制透明度小于1的ImageData,与clip方法组合使用时效果正确,与W3C标准不一致。<br>![putImageData_after](figures/putImageData_after.png) |
212
213
214**起始API Level**
215
216API 8
217
218**变更发生版本**
219
220从OpenHarmony SDK 5.1.0.52开始。
221
222**适配指导**
223
224变更后颜色符合预期,开发者无需适配。
225
226**示例**
227``` ts
228@Entry
229@Component
230struct Demo {
231  private settings: RenderingContextSettings = new RenderingContextSettings(true)
232  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
233
234  build() {
235    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
236      Canvas(this.context)
237        .width('100%')
238        .height('100%')
239        .onReady(() => {
240          this.context.fillStyle = '#ff0000'
241          this.context.fillRect(0, 0, 600, 600)
242          this.context.arc(100, 100, 50, 0, 6.28)
243          this.context.clip()
244          let imageData = new ImageData(100, 100)
245          for (let i = 0; i < imageData.data.length; i += 4) {
246            imageData.data[i + 0] = 0
247            imageData.data[i + 1] = 255
248            imageData.data[i + 2] = 0
249            imageData.data[i + 3] = 85
250          }
251          this.context.putImageData(imageData, 50, 50)
252        })
253    }
254    .width('100%')
255    .height('100%')
256  }
257}
258```
259
260## cl.arkui.7 预览器OffscreenCanvasRenderingContext2D使用drawImage方法绘制透明度小于1的ImageBitmap效果变更
261
262**访问级别**
263
264公开接口
265
266**变更原因**
267
268在预览器上,使用drawImage方法离屏绘制透明度小于1的ImageBitmap,有可能颜色不正确,与W3C标准和真机效果不一致。
269
270**变更影响**
271
272| 变更前                                   | 变更后                                   |
273| ---------------------------------------- | ---------------------------------------- |
274| 在预览器上,使用drawImage方法离屏绘制透明度小于1的ImageBitmap,有可能颜色不正确,与W3C标准和真机效果不一致。<br>![drawImage_before](figures/drawImage_before.png) | 在预览器上,使用drawImage方法离屏绘制透明度小于1的ImageBitmap,颜色正确,与W3C标准和真机效果一致。<br>![drawImage_after](figures/drawImage_after.png) |
275
276
277**起始API Level**
278
279API 8
280
281**变更发生版本**
282
283从OpenHarmony SDK 5.1.0.52开始。
284
285**适配指导**
286
287变更后颜色符合预期,开发者无需适配。
288
289**示例**
290``` ts
291@Entry
292@Component
293struct Demo {
294  private settings: RenderingContextSettings = new RenderingContextSettings(true)
295  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
296
297  build() {
298    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
299      Canvas(this.context)
300        .width('100%')
301        .height('100%')
302        .onReady(() => {
303          let offContext = new OffscreenCanvasRenderingContext2D(100, 100)
304          offContext.fillStyle = 'rgba(0, 255, 0, 0.25)'
305          offContext.fillRect(0, 0, 100, 100)
306          let img = offContext.transferToImageBitmap()
307          this.context.fillStyle = 'rgb(255, 0, 0)'
308          this.context.fillRect(0, 0, 300, 300)
309          this.context.drawImage(img, 50, 50)
310        })
311    }
312    .width('100%')
313    .height('100%')
314  }
315}
316```
317
318## cl.arkui.8 TextInput/TextArea使用attributeModifier修改borderWidth的行为变更
319
320**访问级别**
321
322公开接口
323
324**变更原因**
325
326赋值顺序错误。
327
328**变更影响**
329
330此变更涉及应用适配。
331
332- 变更前:TextInput/TextArea使用attributeModifier修改borderWidth,top实际赋值给bottom,left实际赋值给top,bottom实际赋值给left。
333
334- 变更后:TextInput/TextArea使用attributeModifier修改borderWidth,top、bottom、left、right赋值给对应的位置。
335
336**起始API Level**
337
33812
339
340**变更发生版本**
341
342从OpenHarmony SDK 5.1.0.52开始。
343
344**适配指导**
345
346TextInput/TextArea使用attributeModifier修改borderWidth属性,top、bottom、left、right会赋值给对应的位置,需要修改之前错误的赋值顺序。
347例如如下代码:
348```ts
349@State myModifier: TextInputModifier = new TextInputModifier().borderWidth({
350    top: 5,
351    bottom: 10,
352    left: 15,
353    right: 20
354  })
355```
356维持原状可以做如下调整:
357```ts
358@State myModifier: TextInputModifier = new TextInputModifier().borderWidth({
359    top: 15,  // 使用原先的left
360    bottom: 5, // 使用原先的top
361    left: 10, // 使用原先的bottom
362    right: 20
363  })
364```
365