• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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|  ![长文本缩略](figures/menu-item-long-text-before.png)       |  ![2in1设备长文本换行](figures/menu-item-long-text-after.png)       |
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| ![changeBorderRadiusBefore](figures/changeBorderRadiusBefore.gif) | ![changeBorderRadiusNow](figures/changeBorderRadiusNow.gif) |
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| ![globalCompositeOperation_before](figures/globalCompositeOperation_before.png) | ![globalCompositeOperation_after](figures/globalCompositeOperation_after.png) |
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| ![pattern_before](figures/pattern_before.png) | ![pattern_after](figures/pattern_after.png) |
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| ![alpha_before](figures/alpha_before.png) | ![alpha_after](figures/alpha_after.png) |
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```