1# ArkUI子系统Changelog 2 3## cl.arkui.1 V1和V2组件冻结能力增强 4 5**访问级别** 6 7公开接口 8 9**变更原因** 10 11开发者使用组件冻结功能后,以下场景冻结功能实际未生效:支持冻结的组件嵌套使用的解冻场景、V2自定义组件的解冻场景、Repeat VirtualScroll的复用场景。 12 13**变更影响** 14 15此变更涉及应用适配。 16 17变更前:启用组件冻结,组件冻结实际功能未生效,因此在组件嵌套使用的解冻场景、V2自定义组件的冻结场景、Repeat VirtualScroll的复用场景,其相关的状态变量能够刷新、@Watch/@Monitor方法会执行。 18 19变更后:启用组件冻结,组件冻结实际功能会生效,在组件嵌套使用的解冻场景、V2自定义组件的冻结场景、Repeat VirtualScroll的复用场景,其相关的状态变量不再刷新、@Watch/@Monitor方法不会执行。 20 21举例说明,执行以下用例: 22 23```ts 24@Entry 25@ComponentV2 26struct RepeatVirtualScrollDemo { 27 @Local simpleList: Array<string> = []; 28 @Local bgColor: Color = Color.Pink; 29 30 aboutToAppear(): void { 31 for (let i = 0; i < 7; i++) { 32 this.simpleList.push(`item${i}`); 33 } 34 } 35 36 build() { 37 Column() { 38 Row() { 39 Button(`Reduce length to 5`) 40 .onClick(() => { 41 this.simpleList = this.simpleList.slice(0, 5); 42 }) 43 Button(`Change bgColor`) 44 .onClick(() => { 45 this.bgColor = this.bgColor == Color.Pink ? Color.Blue : Color.Pink; 46 }) 47 } 48 49 List() { 50 Repeat(this.simpleList) 51 .each((obj: RepeatItem<string>) => { 52 }) 53 .key((item: string, index: number) => item) 54 .virtualScroll({ totalCount: this.simpleList.length }) 55 .templateId(() => `a`) 56 .template(`a`, (ri) => { 57 ChildComponent({ 58 message: ri.item, 59 bgColor: this.bgColor 60 }) 61 }, { cachedCount: 2 }) 62 } 63 .cachedCount(0) 64 .height(500) 65 } 66 .height(`100%`) 67 } 68} 69 70@ComponentV2({ freezeWhenInactive: true }) 71struct ChildComponent { 72 @Param @Require message: string; 73 @Param @Require bgColor: Color; 74 // 支持后二级缓存中的组件不刷新,不会打印相应日志 75 @Monitor(`bgColor`) 76 onMessageChange(monitor: IMonitor) { 77 monitor.dirty.forEach((path: string) => { 78 console.log(`repeat---${path} change from ${monitor.value(path)?.before} to ${monitor.value(path)?.now}`) 79 }) 80 } 81 82 build() { 83 Text(`[a]: ${this.message}`) 84 .fontSize(50) 85 .backgroundColor(this.bgColor) 86 } 87} 88``` 89 90**起始API Level** 91 9212 93 94**变更发生版本** 95 96从OpenHarmony 5.1.0.45 版本开始。 97 98**变更的接口/组件** 99 100freezeWhenInactive。 101 102**适配指导** 103 104展示效果不变,组件冻结生效后,@Monitor/@Watch将不再执行。如果需要刷新缓存中的数据,可以关闭组件冻结。 105 106```ts 107// 关闭组件冻结,freezeWhenInactive设置为false 108@ComponentV2({ freezeWhenInactive: false }) 109struct ChildComponent { 110 @Param @Require message: string; 111 @Param @Require bgColor: Color; 112 // 关闭冻结后,二级缓存中的组件会刷新,并打印相应日志 113 @Monitor(`bgColor`) 114 onMessageChange(monitor: IMonitor) { 115 monitor.dirty.forEach((path: string) => { 116 console.log(`repeat---${path} change from ${monitor.value(path)?.before} to ${monitor.value(path)?.now}`) 117 }) 118 } 119 120 build() { 121 Text(`[a]: ${this.message}`) 122 .fontSize(50) 123 .backgroundColor(this.bgColor) 124 } 125} 126``` 127示例中仅展示了Repeat VirtualScroll的复用场景,其他场景如下: 128 129- 组件嵌套使用的解冻场景:在组件冻结开启之后,明确了节点解冻的范围,子组件的非屏上节点不会再被父组件解冻,例子可见[Navigation和TabContent的混用](../../../application-dev/ui/state-management/arkts-custom-components-freeze.md#navigation和tabcontent的混用)。 130 131- V2自定义组件的冻结场景:在状态管理V2组件冻结从父组件激活冻结状态的场景中,如果仅子组件开启了冻结,父组件未开启冻结,子组件也能冻结。例子可见[仅子组件开启组件冻结](../../../application-dev/ui/state-management/arkts-custom-components-freezeV2.md#仅子组件开启组件冻结)。 132 133## cl.arkui.2 ImageSpan组件borderRadius边框圆角属性Modifier设置变更 134 135**访问级别** 136 137公开接口 138 139**变更原因** 140 141ImageSpan组件的borderRadius边框圆角属性通过Modifier设置不生效,边框实际不显示圆角效果。 142 143**变更影响** 144 145此变更不涉及应用适配。 146 147| 变更前 | 变更后 | 148| ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | 149| ImageSpan组件borderRadius边框圆角属性通过Modifier设置不生效。<br>| ImageSpan组件borderRadius边框圆角属性通过Modifier设置生效。<br> | 150 151**起始API Level** 152 153ImageSpanModifier : 12 154 155**变更发生版本** 156 157从OpenHarmony SDK 5.1.0.45开始。 158 159**变更的接口/组件** 160 161ImageSpanModifier接口的borderRadius属性 162 163**适配指导** 164 165无需应用适配,变更后ImageSpan组件的borderRadius边框圆角在Modifier接口设置生效,效果与开发者实际设置的圆角值显示一致。 166 167## cl.arkui.3 Search组件回车键类型为EnterKeyType.NEW_LINE(换行)时onSubmit回调中执行keepEditableState()函数,参数缺省时的行为变更 168 169**访问级别** 170 171公开接口 172 173**变更原因** 174 175开发者通过Search组件的onSubmit接口设置自定义提交事件,并在keepEditableState()函数中配置是否收起键盘。当回车键类型设置为EnterKeyType.NEW_LINE(换行)时,无论是否设置keepEditableState()接口,用户点击输入法软键盘上的换行按钮或按下回车键,键盘均不会收起。 176 177**变更影响** 178 179此变更不涉及应用适配。 180 181变更前:回车键类型为EnterKeyType.NEW_LINE(换行),不设置keepEditableState()接口,用户点击输入法软键盘上的换行按钮或按下回车键,Search组件保持编辑态。 182 183变更后:回车键类型为EnterKeyType.NEW_LINE(换行),不设置keepEditableState()接口,用户点击输入法软键盘上的换行按钮或按下回车键,Search组件退出编辑态。 184 185**起始API Level** 186 18712 188 189**变更发生版本** 190 191从OpenHarmony 5.1.0.45 版本开始。 192 193**变更的接口/组件** 194 195onSubmit事件keepEditableState()接口 196 197**适配指导** 198 199使用Search组件onSubmit接口设置自定义提交事件。触发onSubmit时,如果回车键类型为EnterKeyType.NEW_LINE(换行)且未设置keepEditableState()接口,键盘退出编辑态。举例说明: 200 201```ts 202import { SymbolGlyphModifier } from '@kit.ArkUI' 203 204@Entry 205@Component 206struct EnterKeyTypeIsNewLineDemo { 207 mySearchController: SearchController = new SearchController() 208 209 build() { 210 Column() { 211 Text('Search').fontSize(25).fontColor(Color.Blue) 212 Search({ value: '', placeholder: 'Type to search ...', controller: this.mySearchController }) 213 .searchIcon(new SymbolGlyphModifier($r('sys.symbol.magnifyingglass')).fontColor([Color.Red])) 214 .searchButton('SEARCH') 215 // 回车键类型设置为EnterKeyType.NEW_LINE(换行) 216 .enterKeyType(EnterKeyType.NEW_LINE) 217 .onSubmit((value: string, event?: SubmitEvent) => { 218 // 设置键盘保持编辑态,否则,默认情况键盘退出编辑态 219 event?.keepEditableState() 220 }) 221 }.width('100%').margin({ top: 100 }) 222 } 223} 224``` 225 226## cl.arkui.4 TextInput/TextArea组件border属性dashGap、dashWidth参数Modifier设置变更 227 228**访问级别** 229 230公开接口 231 232**变更原因** 233 234TextInput/TextArea组件的border属性中,虚线参数dashGap和dashWidth通过Modifier设置后未生效。当前TextInput/TextArea组件的实际虚线边框显示为默认效果,而非Modifier设置的值。 235 236**变更影响** 237 238此变更不涉及应用适配。 239 240| 变更前 | 变更后 | 241| ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | 242| TextInput/TextArea组件的border属性中,虚线参数dashGap和dashWidth通过Modifier设置后未生效。| TextInput/TextArea组件的border属性中,虚线参数dashGap和dashWidth通过Modifier设置后生效。 | 243 244**起始API Level** 245 246TextInputModifier :12 247 248TextAreaModifier :12 249 250**变更发生版本** 251 252从OpenHarmony SDK 5.1.0.45开始。 253 254**变更的接口/组件** 255 256TextInputModifier、TextAreaModifier接口的border属性dashGap、dashWidth参数 257 258**适配指导** 259 260无需应用适配,变更后TextInput/TextArea组件的border属性虚线参数dashGap、dashWidth通过Modifier设置生效,显示虚线边框间距和长度效果与开发者设置值一致。 261