• 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 画布组件在绘制文本时设置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组合使用 | ![globalCompositeOperation_before](figures/globalCompositeOperation_before.png) | ![globalCompositeOperation_after](figures/globalCompositeOperation_after.png) |
242| fillStyle设置pattern样式与fillText组合使用 | ![pattern_before](figures/pattern_before.png) | ![pattern_after](figures/pattern_after.png) |
243| globalAlpha设置透明度,fillStyle设置带透明度颜色,与fillText组合使用 | ![alpha_before](figures/alpha_before.png) | ![alpha_after](figures/alpha_after.png) |
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