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.keyframeAnimateTo) 246 247API 11(UIContext.animateTo) 248 249API 12(UIContext.animateToImmediately) 250 251**变更发生版本** 252 253从OpenHarmony SDK 5.0.0.52开始。 254 255**变更的接口/组件** 256 2571、animateTo; 258 2592、animateToImmediately; 260 2613、UIContext.keyframeAnimateTo; 262 2634、UIContext.animateTo; 264 2655、UIContext.animateToImmediately; 266 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