1# ArkUI 子系统变更说明 2 3 4## cl.arkui.1 keyboardShortcut快捷键功能增强 5 6**访问级别** 7 8公开接口 9 10**变更原因** 11 12应用快捷键功能增强。 13 14**变更影响** 15 16该变更为兼容性变更。 17 18API version 13及以后,不再禁止注册以下列表中的快捷键。 19 20- `Ctrl` + `C` 21- `Ctrl` + `A` 22- `Ctrl` + `V` 23- `Ctrl` + `X` 24- `Ctrl` + `Shift` + `Z` 25- `Ctrl` + `Z` 26- `Ctrl` + `Y` 27 28变更前:应用不可以使用keyboardShortcut注册上述列表中的快捷键。 29 30变更后:应用可以使用keyboardShortcut注册上述列表中的快捷键。 31 32**起始API Level** 33 3410 35 36**变更发生版本** 37 38从OpenHarmony SDK 5.0.0.41 版本开始。 39 40**变更的接口/组件** 41 42通用接口。 43 44**适配指导** 45 46不涉及适配,API使用参考[keyboardShortcut](../../../application-dev/reference/apis-arkui/arkui-ts/ts-universal-events-keyboardshortcut.md)。 47 48## cl.arkui.2 hideNonSecureWindows接口使用权限变更 49 50**访问级别** 51 52系统接口 53 54**变更原因** 55 56模态UIExtension默认隐藏不安全窗口且不允许取消隐藏,造成部分场景UX体验不佳。 57 58**变更影响** 59 60该变更为兼容性变更。 61 62变更前:模态UIExtension默认隐藏不安全窗口且不允许取消隐藏。 63 64变更后:模态UIExtension默认隐藏不安全窗口,申请ohos.permission.ALLOW_SHOW_NON_SECURE_WINDOWS权限后可取消隐藏。 65 66**起始API Level** 67 68API 12 69 70**变更发生版本** 71 72从OpenHarmony SDK 5.0.0.41开始。 73 74**变更的接口/组件** 75 76CreateModalUIExtension和hideNonSecureWindows接口。 77 78**适配指导** 79 80为避免不安全窗口先隐藏再显示导致闪烁,模态UIExtension在申请ohos.permission.ALLOW_SHOW_NON_SECURE_WINDOWS权限后,可以在``onSessionCreate``函数中调用``hideNonSecureWindows(false)``接口取消对不安全窗口的隐藏。此时应用需自行确保自身内容不会被遮挡,建议使用``createSubWindowWithOptions``接口创建模态置顶子窗,并将内容都加载在子窗中。 81 82## cl.arkui.3 MenuItem组件在非2in1设备上超长文本布局由缩略显示变更为换行显示 83 84**访问级别** 85 86公开接口 87 88**变更原因** 89 90对于使用超长文本的MenuItem组件场景,默认布局效果优化,UX体验更佳。 91 92**变更影响** 93 94该变更为不兼容变更。 95 96变更前:MenuItem组件含有超长文本时,文本缩略显示。 97 98变更后:API13开始,MenuItem组件含有超长文本时,在2in1设备上不换行,其余设备无限换行。 99 100| 变更前长文本缩略 | 变更后非2in1设备长文本换行 | 101|---------|---------| 102|  |  | 103 104**起始API Level** 105 106API 11 107 108**变更发生版本** 109 110从OpenHarmony SDK 5.0.0.41开始。 111 112**变更的接口/组件** 113 114MenuItem组件。 115 116**适配指导** 117 118MenuItem UX默认布局效果变更,应用无需适配。 119 120## cl.arkui.2 Image组件的borderRadius接口支持动态修改 121 122**访问级别** 123 124公开接口 125 126**变更原因** 127 128为了增强功能的灵活性,Image组件的borderRadius接口支持动态修改。动态修改可以实时更新borderRadius的值,灵活地调整图片的圆角效果。例如,可根据用户交互或状态变化即时改变圆角半径。 129 130**变更影响** 131 132该变更为不兼容变更。 133 134变更前:Image组件的borderRadius接口动态修改不生效。 135 136变更后:Image组件的borderRadius接口动态修改生效。 137 138| 变更前 | 变更后 | 139| ---------------------------------------- | ---------------------------------------- | 140|  |  | 141 142```ts 143// xxx.ets 144@Entry 145@Component 146struct Index { 147 @State borderRadiusValue: number = 10; 148 build() { 149 Column() { 150 Text("BorderRadiusValue = " + this.borderRadiusValue) 151 .height(100) 152 .width(200) 153 .fontSize(FontWeight.Bold) 154 Image($r("app.media.sky")) 155 .height(300) 156 .width(300) 157 .borderRadius(this.borderRadiusValue) 158 Button("增加BorderRadius") 159 .onClick(()=>{ 160 this.borderRadiusValue += 10 161 }) 162 } 163 .height('100%') 164 .width('100%') 165 } 166} 167``` 168 169**起始API Level** 170 1717 172 173**变更发生版本** 174 175从OpenHarmony SDK 5.0.0.41 版本开始。 176 177**变更的接口/组件** 178 179Image组件的borderRadius接口。 180 181**适配指导** 182 183如果应用需要动态修改borderRadius接口,可以在运行时灵活调整圆角效果以响应用户交互或其他状态变化。 184如果应用不需要动态修改borderRadius接口,例如,避免在运行时改变圆角效果。borderRadius接口的参数建议设置为固定值,例如:borderRadius('5px')。 185 186## cl.arkui.3 borderImage的outset属性按照实际的延伸距离来绘制边框向外扩展的效果 187 188**访问级别** 189 190公开接口 191 192**变更原因** 193 194borderImage中的边框外延距离(outset属性)在无需绘制的区域不会被绘制,这与预期行为不符。 195 196**变更影响** 197 198该变更为不兼容变更。 199 200变更前:borderImage中的边框外延距离(outset属性)在无需绘制的区域不会被绘制。 201 202变更后:borderImage中的边框外延距离(outset属性)按照实际延伸距离进行绘制。 203 204**起始API Level** 205 2069 207 208**变更发生版本** 209 210从OpenHarmony SDK 5.0.0.41 版本开始。 211 212**变更的接口/组件** 213 214通用接口。 215 216**适配指导** 217 218默认效果变更,无需适配,但应注意变更后的默认效果是否符合开发者预期,如不符合则应自定义修改效果控制变量以达到预期。 219 220## cl.arkui.4 CanvasRenderingContext2D和OffscreenCanvasRenderingContext2D的globalCompositeOperation属性变更为在绘制文本时生效 221 222**访问级别** 223 224公开接口 225 226**变更原因** 227 228画布绘制的globalCompositeOperation属性在绘制文本时未生效,导致绘制效果与W3C有差异,故需要做绘制行为变更。 229 230 231**变更影响** 232 233该变更为不兼容变更。 234 235变更前:CanvasRenderingContext2D和OffscreenCanvasRenderingContext2D的globalCompositeOperation属性在绘制文本时不生效。 236 237变更后:CanvasRenderingContext2D和OffscreenCanvasRenderingContext2D的globalCompositeOperation属性在绘制文本时生效。 238 239| 变更前 | 变更后 | 240| ---------------------------------------- | ---------------------------------------- | 241|  |  | 242 243**起始API Level** 244 2458 246 247**变更发生版本** 248 249从OpenHarmony 5.0.0.41开始。 250 251**变更的接口/组件** 252 253CanvasRenderingContext2D和OffscreenCanvasRenderingContext2D的fillText和strokeText接口。 254 255**适配指导** 256 257如果希望在绘制文本时globalCompositeOperation属性保持默认值,需要在fillText/strokeText方法前显式声明context.globalCompositeOperation = 'source-over'。 258 259示例: 260 261``` 262// xxx.ets 263@Entry 264@Component 265struct FillText { 266 private settings: RenderingContextSettings = new RenderingContextSettings(true) 267 private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) 268 269 build() { 270 Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { 271 Canvas(this.context) 272 .width('100%') 273 .height('100%') 274 .backgroundColor('#ffff00') 275 .onReady(() =>{ 276 this.context.fillRect(0, 0, 150, 150) 277 this.context.globalCompositeOperation = 'source-out' 278 this.context.fillRect(50, 50, 50, 50) // 生效'source-out'模式 279 this.context.globalCompositeOperation = 'source-over' // globalCompositeOperation默认值 280 this.context.fillText('Hello World', 50, 50) // 生效'source-over'模式 281 }) 282 } 283 .width('100%') 284 .height('100%') 285 } 286} 287``` 288 289## cl.arkui.5 CanvasRenderingContext2D和OffscreenCanvasRenderingContext2D的pattern样式变更为在fillText时生效 290 291**访问级别** 292 293公开接口 294 295**变更原因** 296 297画布绘制的pattern样式在fillText时未生效,导致绘制效果与W3C有差异,故需要做绘制行为变更。 298 299 300**变更影响** 301 302该变更为不兼容变更。 303 304变更前:画布绘制设置fillStyle属性为pattern样式,在fillText时不生效。 305 306变更后:画布绘制设置fillStyle属性为pattern样式,在fillText时生效。 307 308| 变更前 | 变更后 | 309| ---------------------------------------- | ---------------------------------------- | 310|  |  | 311 312**起始API Level** 313 3148 315 316**变更发生版本** 317 318从OpenHarmony 5.0.0.41开始。 319 320**变更的接口/组件** 321 322CanvasRenderingContext2D和OffscreenCanvasRenderingContext2D的fillText接口。 323 324**适配指导** 325 326无需适配,变更后设置fillStyle属性为pattern样式,可以在fillText时生效。 327 328示例: 329 330``` 331// xxx.ets 332@Entry 333@Component 334struct CreatePattern { 335 private settings: RenderingContextSettings = new RenderingContextSettings(true) 336 private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) 337 private img:ImageBitmap = new ImageBitmap("common/images/icon.jpg") 338 339 build() { 340 Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { 341 Canvas(this.context) 342 .width('100%') 343 .height('100%') 344 .backgroundColor('#ffff00') 345 .onReady(() =>{ 346 this.context.font = '30vp sans-serif' 347 let pattern = this.context.createPattern(this.img, 'repeat') 348 if (pattern) { 349 this.context.fillStyle = pattern 350 } 351 this.context.fillText('Hello World', 50, 50) 352 }) 353 } 354 .width('100%') 355 .height('100%') 356 } 357} 358``` 359 360## cl.arkui.6 CanvasRenderingContext2D和OffscreenCanvasRenderingContext2D的fillStyle属性设置带透明度颜色并设置globalAlpha属性时,fillText绘制文本的透明度变更为颜色透明度×globalAlpha 361 362**访问级别** 363 364公开接口 365 366**变更原因** 367 368画布绘制的fillStyle属性设置带透明度颜色并设置globalAlpha属性时,fillText绘制文本的透明度为globalAlpha,未计算颜色透明度,导致颜色效果不正确。 369 370 371**变更影响** 372 373该变更为不兼容变更。 374 375变更前:画布绘制的fillStyle属性设置带透明度颜色并设置globalAlpha属性时,fillText绘制文本的透明度为globalAlpha属性值。 376 377变更后:画布绘制的fillStyle属性设置带透明度颜色并设置globalAlpha属性时,fillText绘制文本的透明度为颜色透明度×globalAlpha。 378 379| 变更前 | 变更后 | 380| ---------------------------------------- | ---------------------------------------- | 381|  |  | 382 383**起始API Level** 384 3858 386 387**变更发生版本** 388 389从OpenHarmony 5.0.0.41开始。 390 391**变更的接口/组件** 392 393CanvasRenderingContext2D和OffscreenCanvasRenderingContext2D的fillText接口。 394 395**适配指导** 396 397无需适配,变更后fillText颜色效果正确。 398 399示例: 400 401``` 402// xxx.ets 403@Entry 404@Component 405struct FillText { 406 private settings: RenderingContextSettings = new RenderingContextSettings(true) 407 private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) 408 409 build() { 410 Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { 411 Canvas(this.context) 412 .width('100%') 413 .height('100%') 414 .backgroundColor('#ffff00') 415 .onReady(() =>{ 416 this.context.font = '30vp sans-serif' 417 this.context.fillStyle = '#88FF0000' // 设置带透明度颜色 418 this.context.globalAlpha = 0.5 // 设置画布透明度 419 this.context.fillText('Hello World', 50, 50) 420 }) 421 } 422 .width('100%') 423 .height('100%') 424 } 425} 426```