1# ArkUI子系统Changelog
2
3## cl.arkui.1 RichEditor(富文本)onDidChange接口变更
4
5**访问级别**
6
7公开接口
8
9**变更原因**
10
11在用户执行删除操作,但实际未删除内容时(例如在aboutToDelete接口中拦截了删除操作),也回调了OnDidChange接口,不符合接口行为定义。
12
13**变更影响**
14
15该变更为不兼容变更。
16
17变更前:
18在用户执行删除操作,但实际未删除内容时回调了OnDidChange接口。
19
20变更后:
21在用户执行删除操作,但实际未删除内容时不回调OnDidChange接口。
22
23**起始API Level**
24
25API 12
26
27**变更发生版本**
28
29从OpenHarmony SDK 5.0.0.52开始。
30
31**变更的接口/组件**
32
33RichEditor
34
35**适配指导**
36
37默认行为变更,无需适配,但应注意变更后的行为是否对整体应用逻辑产生影响。
38
39## cl.arkui.2 RichEditor(富文本)删除完成后光标位置变更
40
41**访问级别**
42
43公开接口
44
45**变更原因**
46
47开发者在aboutToDelete回调中设置光标/选中区后,删除完成后,光标位置异常。
48
49**变更影响**
50
51该变更为不兼容变更。
52
53变更前:
54
551、开发者在aboutToDelete回调中设置光标,删除完成后,光标位置为开发者设置的光标位置。
56
572、开发者在aboutToDelete回调中设置选中区,删除完成后,光标位置为开发者设置的选中区的右边界。
58
59变更后:
60开发者在aboutToDelete回调中设置光标/选中区,删除完成后,光标位置为被删除内容的起始索引位置。
61
62**起始API Level**
63
64API 12
65
66**变更发生版本**
67
68从OpenHarmony SDK 5.0.0.52开始。
69
70**变更的接口/组件**
71
72RichEditor
73
74**适配指导**
75
76默认行为变更,无需适配,但应注意变更后的行为是否对整体应用逻辑产生影响。
77
78
79## cl.arkui.3 RichEditor(富文本)从组件外拖入内容onWillChange、onDidChange回调变更
80
81**访问级别**
82
83公开接口
84
85**变更原因**
86
87从组件外拖入内容时,onWillChange、onDidChange多回调了一次相同的内容,不符合实际文本变化情况。
88
89**变更影响**
90
91该变更为不兼容变更。
92
93变更前:
94从组件外拖入内容时,onWillChange、onDidChange回调了两次同样的内容。
95
96变更后:
97从组件外拖入时,onWillChange、onDidChange回调一次。
98
99**起始API Level**
100
101API 12
102
103**变更发生版本**
104
105从OpenHarmony SDK 5.0.0.52开始。
106
107**变更的接口/组件**
108
109RichEditor
110
111**适配指导**
112
113默认行为变更,无需适配,但应注意变更后的行为是否对整体应用逻辑产生影响。
114
115## cl.arkui.4 RichEditor(富文本)onWillChange接口返回值变更
116
117**访问级别**
118
119公开接口
120
121**变更原因**
122
123在添加Symbol时onWillChange接口返回值中缺少了SymbolId。
124
125**变更影响**
126
127该变更为不兼容变更。
128
129变更前:
130在使用addSymbolSpan接口添加symbol时,onWillChange接口返回的RichEditorTextSpanResult中的value字段为空。
131
132变更后:
133在使用addSymbolSpan接口添加symbol时,onWillChange接口返回的RichEditorTextSpanResult中的value字段返回SymboId。
134
135**起始API Level**
136
137API 12
138
139**变更发生版本**
140
141从OpenHarmony SDK 5.0.0.52开始。
142
143**变更的接口/组件**
144
145RichEditor
146
147**适配指导**
148
149默认行为变更,无需适配,但应注意变更后的行为是否对整体应用逻辑产生影响。
150
151## cl.arkui.5 RichEditor(富文本)TypingStyle默认字体大小变更
152
153**访问级别**
154
155公开接口
156
157**变更原因**
158
159开发者在设置TypingStyle但是没有设置其中的字体大小时,TypingStyle的默认字体大小为14px,显示效果异常。
160
161**变更影响**
162
163该变更为不兼容变更。
164
165变更前:
166开发者使用setTypingStyle接口设置TypingStyle但是没有设置其中的字体大小时,输入新的内容,新输入的文本字体大小为14px。
167
168变更后:
169开发者使用setTypingStyle接口设置TypingStyle但是没有设置其中的字体大小时,输入新的内容,新输入的文本字体大小为16fp。
170
171**起始API Level**
172
173API 12
174
175**变更发生版本**
176
177从OpenHarmony SDK 5.0.0.52开始。
178
179**变更的接口/组件**
180
181RichEditor
182
183**适配指导**
184
185默认行为变更,无需适配,但应注意变更后的行为是否对整体应用逻辑产生影响。
186
187## cl.arkui.6 鼠标按键处理行为变更
188
189**访问级别**
190
191公开接口
192
193**变更原因**
194
195在开发者为组件配置鼠标事件后,若在组件区域内按下鼠标非左键并拖拽至组件区域外释放,此时将无法接收到按键释放事件,这可能导致事件配对失败,进而引发应用程序行为异常。此变更确保开发者能够接收到匹配的按键按下与释放事件。
196
197**变更影响**
198
199该变更为不兼容变更。
200
201变更前:在开发者为组件配置了鼠标事件后,如果在组件区域内按下鼠标非左键,并将鼠标移动至组件区域外再释放按键,此时将无法接收到按键释放事件。
202
203变更后:在开发者为组件配置了鼠标事件后,如果在组件区域内按下鼠标非左键,并将鼠标移动至组件区域外再释放按键,此时可以接收到按键释放事件。
204
205**起始API Level**
206
207API 8
208
209**变更发生版本**
210
211从OpenHarmony SDK 5.0.0.52开始。
212
213**变更的接口/组件**
214
215ArkTS的onMouse接口和Native的OH_NativeXComponent_GetMouseEvent接口。
216
217**适配指导**
218
219默认行为变更,无需适配,但应注意变更后的行为是否对整体应用逻辑产生影响。
220
221## cl.arkui.7 动画接口在播放次数为无限循环时的行为变更
222
223**访问级别**
224
225公开接口
226
227**变更原因**
228
229非动画的闭包函数修改状态变量,存在被带入无限循环动画的风险,产生预期外的无限循环动画且无法停止。
230
231**变更影响**
232
233该变更为不兼容变更。
234
235变更前:在调用无限循环动画接口(例如:无限循环的animateTo)时,首次布局过程中触发的同步回调里所做的修改,会被纳入无限循环动画中,从而产生多余的动画。
236
237变更后:在调用无限循环动画接口(例如:无限循环的animateTo)时,首次布局过程中触发的同步回调里所做的修改,系统至多做2次额外刷新保护,避免动画前的同步回调被纳入无限循环动画中,对于2次额外刷新仍不能保护住的同步回调,和原行为一致也会产生无限循环动画。
238
239**起始API Level**
240
241API 7(animateTo)
242
243API 12(animateToImmediately)
244
245API 11(UIContext.keyframeAnimateTo246
247API 11(UIContext.animateTo248
249API 12(UIContext.animateToImmediately250
251**变更发生版本**
252
253从OpenHarmony SDK 5.0.0.52开始。
254
255**变更的接口/组件**
256
2571、animateTo;
258
2592、animateToImmediately;
260
2613、UIContext.keyframeAnimateTo262
2634、UIContext.animateTo264
2655、UIContext.animateToImmediately266
267**适配指导**
268
269为了创建无限循环的动画,必须明确地将修改操作置于动画接口(例如:无限循环的animateTo)的闭包函数内。
270
271animateTo适配前:
272
273```ts
274@Entry
275@Component
276struct Example {
277  @State rotateAngle: number = 0
278  @State wid: number = 100
279  @State color: Color = Color.Red
280
281  build() {
282    Column() {
283      Column()
284        .size({width: 100, height: 100})
285        .backgroundColor(this.color)
286      Button('animate')
287        .margin(50)
288        .width(this.wid)
289        .rotate({ x: 0, y: 0, z: 1, angle: this.rotateAngle })
290        .onSizeChange((oldValue: SizeOptions, newValue: SizeOptions)=>{
291          // animateTo前修改wid时的布局同步的触发了onSizeChange事件,也会被带入无限循环动画中
292          // 产生背景色的无限循环动画
293          if (Number(newValue.width) >= 150) {
294            this.color = Color.Blue;
295          } else {
296            this.color = Color.Red;
297          }
298        })
299        .onClick(()=>{
300          this.wid = 200;
301          animateTo({
302            iterations: -1, // 设置-1表示动画无限循环
303            playMode: PlayMode.Alternate,
304          }, () => {
305            this.rotateAngle = 90
306          })
307        })
308    }.width('100%').margin({ top: 5 })
309  }
310}
311```
312
313animateTo适配后:
314
315```ts
316@Entry
317@Component
318struct Example {
319  @State rotateAngle: number = 0
320  @State wid: number = 100
321  @State color: Color = Color.Red
322
323  build() {
324    Column() {
325      Column()
326        .size({width: 100, height: 100})
327        .backgroundColor(this.color)
328      Button('animate')
329        .margin(50)
330        .width(this.wid)
331        .rotate({ x: 0, y: 0, z: 1, angle: this.rotateAngle })
332        .onSizeChange((oldValue: SizeOptions, newValue: SizeOptions)=>{
333          // onSizeChange为同步回调,最好不在同步回调中直接修改状态变量。
334        })
335        .onClick(()=>{
336          this.wid = 200;
337          // 如果不需要产生color的动画则在动画外直接修改color,this.color = Color.Blue,而不是在同步回调中
338          animateTo({
339            iterations: -1, // 设置-1表示动画无限循环
340            playMode: PlayMode.Alternate,
341          }, () => {
342            this.rotateAngle = 90
343            // 如果需要产生color的动画则在此处加上this.color = Color.Blue,将color的改变放在动画闭包中
344          })
345        })
346    }.width('100%').margin({ top: 5 })
347  }
348}
349```
350
351