1# ArkUI子系统变更说明
2
3## cl.arkui.1 TextInput组件默认样式变更
4
5**访问级别**
6
7公开接口
8
9**变更原因**
10
11默认样式变更。
12
13**变更影响**
14
15该变更为非兼容性变更。
16
17变更前:下划线模式输入框设置borderRadius未生效,还是默认样式radius为0。下划线模式输入框左右padding为12vp。非下划线模式输入框默认高度为48vp。
18
19![默认样式变更前效果图](figures/underlineBeforeAPI12.png)
20
21变更后:下划线模式输入框设置borderRadius正常生效,不设置则显示默认样式radius为0。下划线模式输入框左右padding为0vp。非下划线模式输入框默认高度为40vp。
22
23![默认样式变更后效果图](figures/underlineAPI12.png)
24
25示例:
26
27```ts
28@Entry
29@Component
30struct TextInputExample {
31  @State Text: string = ''
32  build() {
33    Column({ space: 20 }) {
34      Text(`下划线模式`)
35        .width('95%')
36      // 下划线模式
37      TextInput({ placeholder: 'underline style' })
38        .showUnderline(true)
39        .backgroundColor(Color.Pink)
40        .width(360)
41        .borderRadius(10)
42      Text(`非下划线模式`)
43        .width('95%')
44      TextInput({ placeholder: '请输入用户名', text: this.Text })
45        .showUnderline(false)
46        .width(360)
47        .borderRadius(10)
48
49    }.width('100%')
50  }
51}
52```
53
54**起始API Level**
55
5610
57
58**变更发生版本**
59
60从OpenHarmony SDK 5.0.0.22开始。
61
62**变更的接口/组件**
63
64TextInput组件默认样式变更。
65
66**适配指导**
67
68默认效果变更,无需适配,但应注意变更后的默认效果是否符合开发者预期,如不符合则应自定义修改效果控制变量以达到预期。
69
70## cl.arkui.2  Toast弹窗接口更改消息框背景色、字色,以及Toast的最大宽度及高度,界面语超长逐级缩小字号至12fp,超出截断。
71
72**访问级别**
73
74公开接口
75
76**变更原因**
77
78API version 12及之后更改Toast UX的显示样式。
79
80**变更影响**
81
82该变更为非兼容性变更。
83
84- API version 11及之前,Toast弹窗背景色为深黑色、字色为白色,最大高度没有限制,界面语超长没有截断。<br/>
85
86- API version 12及之后,Toast弹窗在常规亮色显示风格下toast透明模糊背景、字色黑色,暗色显示风格下透明模糊背景、字色白色,Toast的最大高度 =(屏幕高度-信号栏-导航条)*0.65,最大宽度:基于屏幕宽度-2侧margin,根据容器自适应,最大到400vp不再变化。界面语超长逐级缩小字号至12fp,超出截断。<br/>
87
88- API version 11及之前对比API version 12及之后属性变更如下
89
90 | 属性名 | 变更前 | 变更后 |
91|---------|---------|---------|
92| 背景色 | bg_color | COMPONENT_ULTRA_THICK |
93| 圆角 | toast_border_radius | corner_radius_level9 |
94| padding-left | toast_padding_horizontal | padding_level8 |
95| padding-top | toast_padding_vertical | padding_level4 |
96| padding-right | toast_padding_horizontal | padding_level8 |
97| padding-bottom | toast_padding_vertical | padding_level4 |
98| 字体大小 | text_font_size | Body_M |
99| 字体颜色 | text_color | font_primary |
100| 字重 | toast_text_font_weight | font_weight_regular |
101
102**示例:**
103如下图所示为变更前后效果对比:
104
105 | 变更前 | 变更后 |
106|---------|---------|
107| ![](figures/toast_api11.png)  |  ![](figures/toast_api12.png)  |
108
109**API Level**
110
11112
112
113**变更发生版本**
114
115从OpenHarmony SDK 5.0.0.22 版本开始。
116
117**变更的接口/组件**
118
119Toast弹窗接口
120
121**适配指导**
122
123UX默认行为变更,无需适配。
124
125## cl.arkui.3 Text组件clip通用属性默认值变更
126
127**访问级别**
128
129公开接口
130
131**变更原因**
132
133默认值false符合更多应用场景。
134
135**变更影响**
136
137该变更为非兼容性变更。
138
139API version 12 变更前:Text组件clip通用属性默认值为true, 超出组件区域内容会被截断不显示。
140
141![Text组件默认值变更前效果图](figures/textcliptrue.png)
142
143API version 12 变更后:Text组件clip通用属性默认值为false, 超出组件区域内容不会被截断全部显示。
144
145![Text组件默认值变更后效果图](figures/textclipfalse.png)
146
147示例:
148
149```ts
150@Entry
151@Component
152struct TextClipExample {
153  build() {
154    Column({ space: 20 }) {
155      Text('This is set wordBreak to WordBreak text Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu.')
156        .fontSize(12)
157        .border({ width: 1 })
158        .wordBreak(WordBreak.NORMAL)
159        .lineHeight(20)
160        .maxLines(2)
161    }.height(300).width(335).padding({ left: 35, right: 35, top: 35 })
162  }
163}
164```
165
166**起始API Level**
167
1687
169
170**变更发生版本**
171
172从OpenHarmony SDK 5.0.0.22开始。
173
174**变更的接口/组件**
175
176Text组件clip通用属性默认值变更。
177
178**适配指导**
179
180默认效果变更,无需适配,但应注意变更后的默认效果是否符合开发者预期,如不符合则应自定义修改效果控制变量以达到预期。
181
182## cl.arkui.4 TextInput,TextArea,Search组件caretPosition接口异常值处理变更
183
184**访问级别**
185
186公开接口
187
188**变更原因**
189
190优化Search、TextInput、TextArea组件设置光标时异常值处理逻辑。
191
192**变更影响**
193
194该变更为非兼容性变更。
195
196API Version 11 以及之前的版本:TextInput.caretPosition()的入参是负数、undefined时,接口不生效。
197TextInputController.caretPosition()、TextAreaController.caretPosition()、SearchController.caretPosition()的入参是负数时,
198接口生效,移动光标到0的位置并记录光标位置是负数。
199
200API Version 12 变更后:TextInput.caretPosition()的入参是负数、undefined时,当作0处理,接口生效。
201TextInputController.caretPosition()、TextAreaController.caretPosition()、SearchController.caretPosition()的入参是负数时,
202当作0处理,接口生效,移动光标到0的位置并记录光标位置是0。
203
204**起始 API Level**
205
2068
207
208**变更发生版本**
209
210从OpenHarmony SDK 5.0.0.22开始。
211
212**适配指导**
213
214光标位置的视觉效果不会发生变化。
215如果此前设置光标位置的参数是负数、undefined,并且需要光标位置不发生变化,需要修改业务代码,输入合法数值。
216
217## cl.arkui.5  ListItem横划UX行为变更。
218
219**访问级别**
220
221公开接口
222
223**变更原因**
224
225API version 12及之后更改ListItem横划UX行为。
226
227**变更影响**
228
229该变更为非兼容性变更。
230
231- API version 11及之前,ListItem横划展开划出菜单以后,点击List组件非划出菜单区域,ListItem划出菜单不会自动收起,点击位置的组件可以响应点击事件。<br/>
232
233- API version 12及之后,ListItem横划展开划出菜单以后,点击List组件非划出菜单区域,ListItem划出菜单会自动收起,点击位置的组件不响应点击事件。<br/>
234
235**示例:**
236如下图所示为变更前后效果对比:
237
238 | 变更前 | 变更后 |
239|---------|---------|
240| ![](figures/swipeActionBeforeAPI12.gif)  |  ![](figures/swipeActionAPI12.gif)  |
241
242**API Level**
243
24412
245
246**变更发生版本**
247
248从OpenHarmony SDK 5.0.0.22 版本开始。
249
250**变更的接口/组件**
251
252ListItem组件
253
254**适配指导**
255
256UX默认行为变更,无需适配。
257
258## cl.arkui.6 相对布局对Visibility.None的处理规则变更
259
260**访问级别**
261
262公开接口
263
264**变更原因**
265
266UX规格增强
267
268**变更影响**
269
270该变更为非兼容性变更。
271
272变更前:组件A的任一锚点的Visibility为None,组件A不被Measure。
273
274变更后:组件A的任一锚点的Visibility为None,组件A依旧被Measure,锚点组件的位置不变,宽高均视为0。
275
276**API Level**
277
278该特性版本为API 7,变更版本为API 12。
279
280**变更发生版本**
281
282从OpenHarmony SDK 5.0.0.23开始。
283
284**适配指导**
285
286如果需要组件A在锚点组件的Visibility设置为None之后不被Measure,可将组件A的Visibility设置为Hidden或者None。
287
288## cl.arkui.7 C-API 获取Native模块接口集合的接口变更
289
290**访问级别**
291
292公开接口
293
294**变更原因**
295
296兼容性增强
297
298**变更影响**
299
300该变更为非兼容性变更。
301
302变更前:用户可通过 OH_ArkUI_GetNativeAPI 接口获取Native模块接口集合。
303
304变更后:用户需通过 OH_ArkUI_GetModuleInterface 接口或者 OH_ArkUI_QueryModuleInterfaceByName 接口获取Native模块接口集合。
305
306**起始API level**
307
308该特性版本和变更版本均为API 12。
309
310**变更发生版本**
311
312从OpenHarmony SDK 5.0.0.22开始。
313
314**适配指导**
315
316用户可参考如下方式调用新的API 获取Native模块接口集合
317
318方式1:
319
320```
321auto nodeAPI = reinterpret_cast<ArkUI_NativeNodeAPI_1*>(
322  OH_ArkUI_QueryModuleInterfaceByName(ARKUI_NATIVE_NODE, "ArkUI_NativeNodeAPI_1"));
323```
324
325方式2:
326
327```
328ArkUI_NativeNodeAPI_1* nodeAPI = nullptr;
329OH_ArkUI_GetModuleInterface(ARKUI_NATIVE_NODE, ArkUI_NativeNodeAPI_1, nodeAPI);
330```
331
332## cl.arkui.8 C-API 事件注册接口变更
333
334**访问级别**
335
336公开接口
337
338**变更原因**
339
340兼容性增强
341
342**变更影响**
343
344该变更为非兼容性变更。
345
346变更前:
347
348* 用户可通过 nodeAPI->registerNodeEvent(nodePtr, eventType, eventId) 方式为指定组件绑定指定事件,入参为三个,依次为待绑定事件的组件节点指针、待绑定的事件类型、待绑定事件的ID;
349
350* 事件响应后,用户可在回调中获取到指向事件回调数据,类型为ArkUI_NodeEvent 的指针,并可以直接访问指针中的结构体和数据,如下所示:
351
352代码示例:
353
354```
355nodeAPI->registerNodeEvent(button, NODE_ON_CLICK, 1); // 1 为注册的事件ID
356auto onclick = [](ArkUI_NodeEvent *event) {
357  if (event->eventId == 1) {
358    auto offsetX = event->componentEvent.data[0].f32; // 获取点击位置相对于被点击组件左上角的X坐标
359  }
360};
361nodeAPI->registerNodeEventReceiver(onclick); // 监听事件回调,当触发button组件的点击事件时会执行用户定义的onclick方法
362```
363
364变更后:
365
366* 用户注册事件的接口新增了一位自定义参数的指针,形如 nodeAPI->registerNodeEvent(nodePtr, eventType, eventId,userData)。
367
368* 事件响应后,用户可在回调中获取到指向事件回调数据,类型为ArkUI_NodeEvent 的指针,但不再暴露指针的具体结构体,用户需通过指定的函数方法获取指定的参数,如下所示:
369
370代码示例:
371
372```
373nodeAPI->registerNodeEvent(button, NODE_ON_CLICK, 1, nullptr); // 暂无需要传入的自定义数据,可用nullptr代替
374auto onclick = [](ArkUI_NodeEvent *event) {
375  if (OH_ArkUI_NodeEvent_GetTargetId(event) == 1) { // 使用 OH_ArkUI_NodeEvent_GetTargetId 方法获取事件ID
376    auto offsetX = OH_ArkUI_NodeEvent_GetNodeComponentEvent(event)->data[0].f32; // 获取点击位置相对于被点击组件左上角的X坐标
377  }
378};
379nodeAPI->registerNodeEventReceiver(onclick);
380```
381
382**起始API level**
383
384该特性版本和变更版本均为API 12。
385
386**变更发生版本**
387
388从OpenHarmony SDK 5.0.0.22开始。
389
390**适配指导**
391
392* 用户全局搜索 registerNodeEvent 函数,将所有使用此函数的入参改为4位入参,第四位可用 nullptr 空指针替代。
393
394* 用户全局搜索 ArkUI_NodeEvent类型,将回调中的 event->eventId 修改为 OH_ArkUI_NodeEvent_GetTargetId(event)。
395
396* 用户全局搜索 ArkUI_NodeEvent类型,将回调中的 event->kind 修改为 OH_ArkUI_NodeEvent_GetEventType(event)。
397
398* 用户全局搜索 ArkUI_NodeEvent类型,将回调中的 event->componentEvent.data 修改为 OH_ArkUI_NodeEvent_GetNodeComponentEvent(event)->data。
399
400* 用户全局搜索 ArkUI_NodeEvent类型,将回调中的 event->stringEvent.pStr 修改为 OH_ArkUI_NodeEvent_GetStringAsyncEvent(event)->pStr。
401
402* 用户全局搜索 ArkUI_NodeEvent类型,将回调中的 event->touchEvent 修改为先使用 OH_ArkUI_NodeEvent_GetInputEvent(event) 方法获取到指向 ArkUI_UIInputEvent 类型的指针,再通过开放的各种获取 ArkUI_UIInputEvent 数据的函数方法获取详细的接口数据。
403
404## cl.arkui.9 visibility异常参数处理规格变更
405
406**访问级别**
407
408公开接口
409
410**变更原因**
411
412接口异常值处理变更。
413
414**变更影响**
415
416变更前:异常值时当作hidden处理。
417
418变更后:异常值时当作visible处理。
419
420**起始API Level**
421
422该特性版本为API 7,变更版本为API 12。
423
424**变更发生版本**
425
426从OpenHarmony SDK 5.0.0.22开始。
427
428**适配指导**
429
430异常值处理逻辑变更,不涉及适配,但应注意变更后的默认效果是否符合开发者预期,如不符合则自定义修改效果控制变量以达到预期。
431
432## cl.arkui.10 矩阵变换接口transform行为变更
433
434**访问级别**
435
436公开接口
437
438**变更原因**
439
440接口功能完善。
441
442**变更影响**
443
444变更前:传入矩阵中的透视投影变换不进行处理,即不支持透视投影变换。
445
446变更后:处理传入矩阵中的透视投影变换,即支持透视投影变换。
447
448**示例:**
449示例代码
450```
451import matrix4 from '@ohos.matrix4'
452const matrixArr: [number, number, number, number,
453  number, number, number, number,
454  number, number, number, number,
455  number, number, number, number] = [
456  0.25, 0, 0, -0.0015,
457  0, 1, 0, 0,
458  0, 0, 1, 0,
459  0, 0, 0, 1];
460
461let matrix = matrix4.init(matrixArr);
462
463@Entry
464@Component
465struct Tests {
466  build() {
467    Column() {
468      Rect()
469        .fill(Color.Gray)
470        .scale({
471          x: 1,
472          centerX: 0,
473          centerY: 0,
474        })
475        .width('500px')
476        .height('500px')
477        .transform(matrix)
478    }.width('100%').height('100%').alignItems(HorizontalAlign.Center)
479  }
480}
481```
482如下图所示为变更前后效果对比:
483
484 | 变更前 | 变更后 |
485|---------|---------|
486| ![](figures/transform_before.png)  |  ![](figures/transform_after.png)  |
487
488**起始API Level**
489
490该特性版本为API 7。
491
492**变更发生版本**
493
494从OpenHarmony SDK 5.0.0.22开始。
495
496**适配指导**
497
498若传入的矩阵中涉及到透视投影变换,即矩阵最后一列的前三个参数不为0,则会出现变更前后不一致的现象。
499
500适配方法:传入的矩阵中若是涉及到透视投影变换,处理透视投影相关的变换,因此变换效果会发生变化,若是想保持原样,将Matrix4Transit的最后一列的前三个参数(即第4,8,12个参数)置为0即可。
501```
502const matrixArr: [number, number, number, number,
503  number, number, number, number,
504  number, number, number, number,
505  number, number, number, number] = [
506  0.25, 0, 0, -0.0015,
507  0, 1, 0, 0,
508  0, 0, 1, 0,
509  0, 0, 0, 1];
510
511for (let i = 3;i < 12;i += 4) {
512    matrixArr[i] = 0;
513}
514
515let matrix = matrix4.init(matrixArr);
516```
517