• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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-border-radius-before](figures/imageSpan-border-radius-before.png)| ImageSpan组件borderRadius边框圆角属性通过Modifier设置生效。<br>![imageSpan-border-radius-after](figures/imageSpan-border-radius-after.png) |
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-dash-before](figures/textInput-textArea-border-dash-before.png)| TextInput/TextArea组件的border属性中,虚线参数dashGap和dashWidth通过Modifier设置后生效。![textInput-textArea-border-dash-after](figures/textInput-textArea-border-dash-after.png) |
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