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方法在屏绘制透明度小于1的ImageData,与clip方法组合使用时效果正确,与W3C标准不一致。<br> | 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方法离屏绘制透明度小于1的ImageBitmap,颜色正确,与W3C标准和真机效果一致。<br> | 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