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|  |  | 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|  |  | 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|  |  | 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> | 当传入参数为0时,按照默认值进行参数设置。<br> | 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>  | 弹窗标题超长时,优先换行,再缩小字号展示,最小至9vp。<br> | 355 356变更点2:弹窗内容超过一行时默认对齐行为变更。 357 358| 变更前 | 变更后 | 359|----------------------------------------------------------------------|------------------------------------------------------------------| 360| 弹窗内容多行文本时居左对齐。<br>  | 弹窗内容文本居中对齐。<br>  | 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自定义实现。