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 画布组件在绘制文本时设置globalCompositeOperation、fillStyle和globalAlpha属性的效果变更 221 222**访问级别** 223 224公开接口 225 226**变更原因** 227 228使用画布组件(CanvasRenderingContext2D和OffscreenCanvasRenderingContext2D)进行文本绘制时,设置globalCompositeOperation属性和pattern样式的fillStyle属性无效;设置带透明度颜色的fillStyle属性,同时设置globalAlpha属性,文本的透明度仅由globalAlpha决定,不考虑fillStyle属性的颜色透明度。导致绘制效果与W3C标准存在差异,因此需要变更绘制行为。 229 230 231**变更影响** 232 233该变更为不兼容变更。 234 235变更前:CanvasRenderingContext2D和OffscreenCanvasRenderingContext2D的globalCompositeOperation属性与fillStyle属性设置的pattern样式在绘制文本时不生效;fillStyle属性设置带透明度颜色并设置globalAlpha属性时,fillText绘制文本的透明度为globalAlpha属性值。 236 237变更后:CanvasRenderingContext2D和OffscreenCanvasRenderingContext2D的globalCompositeOperation属性与fillStyle属性设置的pattern样式在绘制文本时生效;fillStyle属性设置带透明度颜色并设置globalAlpha属性时,fillText绘制文本的透明度为颜色透明度×globalAlpha。 238 239| 使用场景 | 变更前 | 变更后 | 240| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | 241| globalCompositeOperation与fillText组合使用 |  |  | 242| fillStyle设置pattern样式与fillText组合使用 |  |  | 243| globalAlpha设置透明度,fillStyle设置带透明度颜色,与fillText组合使用 |  |  | 244 245**起始API Level** 246 2478 248 249**变更发生版本** 250 251从OpenHarmony 5.0.0.41开始。 252 253**变更的接口/组件** 254 255CanvasRenderingContext2D和OffscreenCanvasRenderingContext2D的fillText和strokeText接口。 256 257**适配指导** 258 259若希望在绘制文本时globalCompositeOperation属性保持默认值,需在fillText/strokeText方法前声明context.globalCompositeOperation = 'source-over';若希望pattern样式在绘制文本时不生效,需在fillText方法前指定所需的fillStyle;若希望文本透明度不受fillStyle颜色透明度的影响,需将fillStyle设置为不透明颜色。 260 261示例: 262 263``` 264// xxx.ets 265@Entry 266@Component 267struct FillText { 268 private settings: RenderingContextSettings = new RenderingContextSettings(true) 269 private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) 270 private img:ImageBitmap = new ImageBitmap("common/images/icon.jpg") 271 272 build() { 273 Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { 274 Canvas(this.context) 275 .width('100%') 276 .height('100%') 277 .onReady(() =>{ 278 this.context.font = '30vp sans-serif' 279 280 this.context.fillStyle = 'rgb(227, 248, 249)' 281 this.context.fillRect(0, 0, 150, 150) 282 this.context.fillStyle = 'rgb(39, 135, 217)' 283 this.context.globalCompositeOperation = 'xor' // 设置globalCompositeOperation为'xor'模式 284 this.context.fillText('Hello World', 50, 50) // 生效'xor'模式 285 this.context.globalCompositeOperation = 'source-over' // 设置globalCompositeOperation为默认值 286 this.context.fillText('Hello World', 50, 150) // 生效'source-over'模式 287 288 let pattern = this.context.createPattern(this.img, 'repeat') 289 if (pattern) { 290 this.context.fillStyle = pattern // 设置fillStyle为pattern样式 291 } 292 this.context.fillText('Hello World', 50, 250) // 生效pattern样式 293 294 this.context.fillStyle = '#88FF0000' // 设置fillStyle为带透明度颜色 295 this.context.globalAlpha = 0.5 // 设置画布透明度 296 this.context.fillText('Hello World', 50, 350) // 透明度为颜色透明度×globalAlpha 297 }) 298 } 299 .width('100%') 300 .height('100%') 301 } 302} 303``` 304