1e41f4b71Sopenharmony_ci## cl.arkui.1 Specification Change for RichEditor Menu Visibility When Scrolling After Popup
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ci**Access Level**
4e41f4b71Sopenharmony_ci
5e41f4b71Sopenharmony_ciPublic API
6e41f4b71Sopenharmony_ci
7e41f4b71Sopenharmony_ci**Reason for Change**
8e41f4b71Sopenharmony_ci
9e41f4b71Sopenharmony_ciThe default UX behavior regarding whether the **RichEditor** menu should be displayed after the popup and when scrolling stops has changed.
10e41f4b71Sopenharmony_ci
11e41f4b71Sopenharmony_ci**Change Impact**
12e41f4b71Sopenharmony_ci
13e41f4b71Sopenharmony_ciBefore change: After the **RichEditor** menu is popped up, the menu is hidden when scrolling the component and does not automatically reappear after scrolling stops.
14e41f4b71Sopenharmony_ci
15e41f4b71Sopenharmony_ciAfter change: After the **RichEditor** menu is popped up, the menu is hidden when scrolling the component but will automatically reappear after scrolling stops.
16e41f4b71Sopenharmony_ci
17e41f4b71Sopenharmony_ci**Start API Level**
18e41f4b71Sopenharmony_ci
19e41f4b71Sopenharmony_ciAPI level 12
20e41f4b71Sopenharmony_ci
21e41f4b71Sopenharmony_ci**Change Since**
22e41f4b71Sopenharmony_ci
23e41f4b71Sopenharmony_ciOpenHarmony SDK version 5.0.0.24
24e41f4b71Sopenharmony_ci
25e41f4b71Sopenharmony_ci**Adaptation Guide**
26e41f4b71Sopenharmony_ci
27e41f4b71Sopenharmony_ciThe default UX behavior has changed. No adaptation is needed. It does not affect the functional logic. Pay attention to the current rich text menu's UX performance when scrolling stops.
28e41f4b71Sopenharmony_ci
29e41f4b71Sopenharmony_ci## cl.arkui.2 Corner Customization for bindMenu and bindContextMenu Menus
30e41f4b71Sopenharmony_ci
31e41f4b71Sopenharmony_ci**Access Level**
32e41f4b71Sopenharmony_ci
33e41f4b71Sopenharmony_ciPublic API
34e41f4b71Sopenharmony_ci
35e41f4b71Sopenharmony_ci**Reason for Change**
36e41f4b71Sopenharmony_ci
37e41f4b71Sopenharmony_ciEnhancement of functionality
38e41f4b71Sopenharmony_ci
39e41f4b71Sopenharmony_ci**Change Impact**
40e41f4b71Sopenharmony_ci
41e41f4b71Sopenharmony_ciThis change is a compatible change.
42e41f4b71Sopenharmony_ci
43e41f4b71Sopenharmony_ci**API Level**
44e41f4b71Sopenharmony_ci
45e41f4b71Sopenharmony_ci12
46e41f4b71Sopenharmony_ci
47e41f4b71Sopenharmony_ci**Change Since**
48e41f4b71Sopenharmony_ci
49e41f4b71Sopenharmony_ciOpenHarmony SDK version 5.0.0.24
50e41f4b71Sopenharmony_ci
51e41f4b71Sopenharmony_ci**Key API/Component Changes**
52e41f4b71Sopenharmony_ci
53e41f4b71Sopenharmony_cibindMenu, bindContextMenu
54e41f4b71Sopenharmony_ci
55e41f4b71Sopenharmony_ci**Adaptation Guide**
56e41f4b71Sopenharmony_ci
57e41f4b71Sopenharmony_ciThis change is a compatible change, and no adaptation is needed. For details about how to use this feature, see [Menu Control](../../../application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-menu.md). 
58e41f4b71Sopenharmony_ci
59e41f4b71Sopenharmony_ci## cl.arkui.3 Specification Change in the Use of promptAction.showToast in Unclear UI Contexts
60e41f4b71Sopenharmony_ci
61e41f4b71Sopenharmony_ci**Access Level**
62e41f4b71Sopenharmony_ci
63e41f4b71Sopenharmony_ciPublic API
64e41f4b71Sopenharmony_ci
65e41f4b71Sopenharmony_ci**Reason for Change**
66e41f4b71Sopenharmony_ci
67e41f4b71Sopenharmony_ciThe functionality of this module relies on the UI execution context and should not be used in places where the UI context is unclear. If this interface is called within non-UI pages or some asynchronous callbacks, it may fail to track the current UI context, leading to incorrect calculation of the toast position.
68e41f4b71Sopenharmony_ci
69e41f4b71Sopenharmony_ci**Change Impact**
70e41f4b71Sopenharmony_ci
71e41f4b71Sopenharmony_ciBefore change: In places with an unclear UI context, toasts could be displayed directly, but the position might be incorrect.
72e41f4b71Sopenharmony_ci
73e41f4b71Sopenharmony_ciAfter change: In places with an unclear UI context, users are required to specify the corresponding UIContext to obtain the promptAction object for displaying toasts.
74e41f4b71Sopenharmony_ci
75e41f4b71Sopenharmony_ci**Start API Level**
76e41f4b71Sopenharmony_ci
77e41f4b71Sopenharmony_ciAPI level 9
78e41f4b71Sopenharmony_ci
79e41f4b71Sopenharmony_ci**Change Since**
80e41f4b71Sopenharmony_ci
81e41f4b71Sopenharmony_ciOpenHarmony SDK version 5.0.0.24
82e41f4b71Sopenharmony_ci
83e41f4b71Sopenharmony_ci**Adaptation Guide**
84e41f4b71Sopenharmony_ci
85e41f4b71Sopenharmony_ciWhen attempting to display a toast within http requests, delays, or sub-windows, the toast may not appear, and the log may show an error code 11 returned by the window. In such cases, users need to specify the context manually, as in the following code example:
86e41f4b71Sopenharmony_ci
87e41f4b71Sopenharmony_ci```ts
88e41f4b71Sopenharmony_ciimport promptAction from '@ohos.promptAction';
89e41f4b71Sopenharmony_ciimport http from '@ohos.net.http';
90e41f4b71Sopenharmony_ci
91e41f4b71Sopenharmony_ci@Entry
92e41f4b71Sopenharmony_ci@Component
93e41f4b71Sopenharmony_cistruct Index {
94e41f4b71Sopenharmony_ci  @State message: string = 'Show toast';
95e41f4b71Sopenharmony_ci
96e41f4b71Sopenharmony_ci  build() {
97e41f4b71Sopenharmony_ci    Row() {
98e41f4b71Sopenharmony_ci      Button() {
99e41f4b71Sopenharmony_ci        Text(this.message)
100e41f4b71Sopenharmony_ci          .fontSize(20)
101e41f4b71Sopenharmony_ci          .fontWeight(FontWeight.Bold)
102e41f4b71Sopenharmony_ci      }
103e41f4b71Sopenharmony_ci      .width('100%')
104e41f4b71Sopenharmony_ci      .onClick(()=>{
105e41f4b71Sopenharmony_ci        let httpRequest = http.createHttp()
106e41f4b71Sopenharmony_ci        let uiContext = this.getUIContext()
107e41f4b71Sopenharmony_ci        httpRequest.request('https://xxx.com', { method: http.RequestMethod.GET }).then((res: http.HttpResponse) => {
108e41f4b71Sopenharmony_ci          let promptAction1 = uiContext.getPromptAction()
109e41f4b71Sopenharmony_ci          promptAction1.showToast({
110e41f4b71Sopenharmony_ci            message:"Toast for success",
111e41f4b71Sopenharmony_ci            duration:1000,
112e41f4b71Sopenharmony_ci            showMode: promptAction.ToastShowMode.TOP_MOST
113e41f4b71Sopenharmony_ci          })
114e41f4b71Sopenharmony_ci        }).catch((err: Error)=>{
115e41f4b71Sopenharmony_ci          let promptAction1 = uiContext.getPromptAction()
116e41f4b71Sopenharmony_ci          promptAction1.showToast({
117e41f4b71Sopenharmony_ci            message:"Toast for error",
118e41f4b71Sopenharmony_ci            duration:1000,
119e41f4b71Sopenharmony_ci            showMode: promptAction.ToastShowMode.TOP_MOST
120e41f4b71Sopenharmony_ci          })
121e41f4b71Sopenharmony_ci          httpRequest.destroy()
122e41f4b71Sopenharmony_ci        })
123e41f4b71Sopenharmony_ci      })
124e41f4b71Sopenharmony_ci    }
125e41f4b71Sopenharmony_ci    .height('100%')
126e41f4b71Sopenharmony_ci  }
127e41f4b71Sopenharmony_ci}
128e41f4b71Sopenharmony_ci```
129e41f4b71Sopenharmony_ci
130e41f4b71Sopenharmony_ci## cl.arkui.4 Default Unit Specification Change for backgroundImagePosition Parameter
131e41f4b71Sopenharmony_ci
132e41f4b71Sopenharmony_ci**Access Level**
133e41f4b71Sopenharmony_ci
134e41f4b71Sopenharmony_ciPublic API
135e41f4b71Sopenharmony_ci
136e41f4b71Sopenharmony_ci**Reason for Change**
137e41f4b71Sopenharmony_ci
138e41f4b71Sopenharmony_ciThe default unit value of the interface does not match the documentation description.
139e41f4b71Sopenharmony_ci
140e41f4b71Sopenharmony_ci**Change Impact**
141e41f4b71Sopenharmony_ci
142e41f4b71Sopenharmony_ciBefore change: Numeric values entered for the position type were defaulted to px units.
143e41f4b71Sopenharmony_ci
144e41f4b71Sopenharmony_ciAfter change: Numeric values entered for the position type are defaulted to vp units.
145e41f4b71Sopenharmony_ci
146e41f4b71Sopenharmony_ci**Start API Level**
147e41f4b71Sopenharmony_ci
148e41f4b71Sopenharmony_ciThe feature was at API level 7, and the change was made in API level 12.
149e41f4b71Sopenharmony_ci
150e41f4b71Sopenharmony_ci**Change Since**
151e41f4b71Sopenharmony_ci
152e41f4b71Sopenharmony_ciOpenHarmony SDK version 5.0.0.24
153e41f4b71Sopenharmony_ci
154e41f4b71Sopenharmony_ci**Adaptation Guide**
155e41f4b71Sopenharmony_ci
156e41f4b71Sopenharmony_ciThe default behavior has changed, and no adaptation is required. However, you need to ensure that the new default effect meets expectations. If px units are needed, values can be concatenated as a string with "px" appended, or converted from px to vp before setting.
157e41f4b71Sopenharmony_ci
158e41f4b71Sopenharmony_ci## cl.arkui.5 Default Value Change for RicEditor Component's RichEditorTextStyle Universal Attribute
159e41f4b71Sopenharmony_ci
160e41f4b71Sopenharmony_ci**Access Level**
161e41f4b71Sopenharmony_ci
162e41f4b71Sopenharmony_ciPublic API
163e41f4b71Sopenharmony_ci
164e41f4b71Sopenharmony_ci**Reason for Change**
165e41f4b71Sopenharmony_ci
166e41f4b71Sopenharmony_ciEnhancement of UX specifications.
167e41f4b71Sopenharmony_ci
168e41f4b71Sopenharmony_ci**Change Impact**
169e41f4b71Sopenharmony_ci
170e41f4b71Sopenharmony_ciThis change is non-compatible.
171e41f4b71Sopenharmony_ci
172e41f4b71Sopenharmony_ci1. Modification of the font display size set in the **RichEditorTextStyle** universal attribute when the font size is 0.
173e41f4b71Sopenharmony_ci
174e41f4b71Sopenharmony_ci   - Before change: Content was not displayed when the font size was set to 0.
175e41f4b71Sopenharmony_ci   - After change: When the font size is set to 0, it displays with the default font size of 16fp.
176e41f4b71Sopenharmony_ci
177e41f4b71Sopenharmony_ci2. Modification of the default font color set in the **RichEditorTextStyle** universal attribute.
178e41f4b71Sopenharmony_ci
179e41f4b71Sopenharmony_ci   - Before change: The default font color was **Color.Black**.
180e41f4b71Sopenharmony_ci   - After change: The default font color is **font_primary** from system resources.
181e41f4b71Sopenharmony_ci
182e41f4b71Sopenharmony_ci3. Modification of the default text decoration color set in the **RichEditorTextStyle** universal attribute.
183e41f4b71Sopenharmony_ci
184e41f4b71Sopenharmony_ci   - Before change: The default decoration line color was **Color.Black**.
185e41f4b71Sopenharmony_ci   - After change: The default decoration line color follows the font color.
186e41f4b71Sopenharmony_ci
187e41f4b71Sopenharmony_ci**Start API Level**
188e41f4b71Sopenharmony_ci
189e41f4b71Sopenharmony_ci10
190e41f4b71Sopenharmony_ci
191e41f4b71Sopenharmony_ci**Change Since**
192e41f4b71Sopenharmony_ci
193e41f4b71Sopenharmony_ciOpenHarmony SDK version 5.0.0.24
194e41f4b71Sopenharmony_ci
195e41f4b71Sopenharmony_ci**Adaptation Guide**
196e41f4b71Sopenharmony_ci
197e41f4b71Sopenharmony_ciThe default behavior has changed, and no adaptation is required. However, developers should ensure that the new default effects meet their expectations. If the new defaults do not meet the requirements, custom modifications to the effect control variables should be made to achieve the desired outcome. 
198e41f4b71Sopenharmony_ci
199e41f4b71Sopenharmony_ci
200e41f4b71Sopenharmony_ci## cl.arkui.6 Change in Parent-Child Relationship When Using Custom Components in @Builder Function
201e41f4b71Sopenharmony_ci
202e41f4b71Sopenharmony_ci**Access Level**
203e41f4b71Sopenharmony_ci
204e41f4b71Sopenharmony_ciPublic API
205e41f4b71Sopenharmony_ci
206e41f4b71Sopenharmony_ci**Reason for Change**
207e41f4b71Sopenharmony_ci
208e41f4b71Sopenharmony_ciWhen a Builder function is passed into a child component, the `this` within the child component refers to the parent component where the Builder function is defined. This can lead to runtime errors in certain scenarios, hence the change is necessary.
209e41f4b71Sopenharmony_ci
210e41f4b71Sopenharmony_ci**Change Impact**
211e41f4b71Sopenharmony_ci
212e41f4b71Sopenharmony_ciExample 1:
213e41f4b71Sopenharmony_ci
214e41f4b71Sopenharmony_ci```ts
215e41f4b71Sopenharmony_ci@Entry
216e41f4b71Sopenharmony_ci@Component
217e41f4b71Sopenharmony_cistruct Index {
218e41f4b71Sopenharmony_ci  @Builder thirdBuilder() {
219e41f4b71Sopenharmony_ci    Third()
220e41f4b71Sopenharmony_ci  }
221e41f4b71Sopenharmony_ci  build() {
222e41f4b71Sopenharmony_ci    Column() {
223e41f4b71Sopenharmony_ci      Second({secondBuilder: this.thirdBuilder.bind(this)})
224e41f4b71Sopenharmony_ci    }
225e41f4b71Sopenharmony_ci  }
226e41f4b71Sopenharmony_ci}
227e41f4b71Sopenharmony_ci
228e41f4b71Sopenharmony_ci@Component
229e41f4b71Sopenharmony_cistruct Second {
230e41f4b71Sopenharmony_ci  @Provide message: string = 'Hello';
231e41f4b71Sopenharmony_ci  @BuilderParam secondBuilder: ()=>void;
232e41f4b71Sopenharmony_ci  build() {
233e41f4b71Sopenharmony_ci    Column() {
234e41f4b71Sopenharmony_ci      this.secondBuilder()
235e41f4b71Sopenharmony_ci    }
236e41f4b71Sopenharmony_ci  }
237e41f4b71Sopenharmony_ci}
238e41f4b71Sopenharmony_ci
239e41f4b71Sopenharmony_ci@Component
240e41f4b71Sopenharmony_cistruct Third {
241e41f4b71Sopenharmony_ci  @Consume message: string;
242e41f4b71Sopenharmony_ci  build() {
243e41f4b71Sopenharmony_ci    Column() {
244e41f4b71Sopenharmony_ci      Text(this.message).fontSize(30)
245e41f4b71Sopenharmony_ci    }
246e41f4b71Sopenharmony_ci  }
247e41f4b71Sopenharmony_ci}
248e41f4b71Sopenharmony_ci```
249e41f4b71Sopenharmony_ci
250e41f4b71Sopenharmony_ciBefore the change:
251e41f4b71Sopenharmony_ci
252e41f4b71Sopenharmony_ciExecuting the aforementioned code would result in a runtime error.
253e41f4b71Sopenharmony_ci
254e41f4b71Sopenharmony_ci![ScreenShot](ScreenShot_20240429152341.png)
255e41f4b71Sopenharmony_ci
256e41f4b71Sopenharmony_ciAfter the change:
257e41f4b71Sopenharmony_ci
258e41f4b71Sopenharmony_ciNo errors occur.
259e41f4b71Sopenharmony_ci
260e41f4b71Sopenharmony_ci**Scenario Examples Involved**
261e41f4b71Sopenharmony_ci
262e41f4b71Sopenharmony_ciExample of dialog nesting:
263e41f4b71Sopenharmony_ci
264e41f4b71Sopenharmony_ci```ts
265e41f4b71Sopenharmony_ci@Builder
266e41f4b71Sopenharmony_cifunction customDialogBuilderFunc(){}
267e41f4b71Sopenharmony_ci
268e41f4b71Sopenharmony_ci@CustomDialog
269e41f4b71Sopenharmony_cistruct CustomDialogExampleTwo {
270e41f4b71Sopenharmony_ci  @BuilderParam grandsonBuilderFunc: ()=>void;
271e41f4b71Sopenharmony_ci  grandsonFunc: ()=>void = ()=>{};
272e41f4b71Sopenharmony_ci  controllerTwo?: CustomDialogController;
273e41f4b71Sopenharmony_ci  @State message: string = "I'm the second dialog box.";
274e41f4b71Sopenharmony_ci  @State showIf: boolean = false;
275e41f4b71Sopenharmony_ci  build() {
276e41f4b71Sopenharmony_ci    Column() {
277e41f4b71Sopenharmony_ci      this.grandsonBuilderFunc()
278e41f4b71Sopenharmony_ci      Button("show/hide Text")
279e41f4b71Sopenharmony_ci        .onClick(()=>{
280e41f4b71Sopenharmony_ci          this.grandsonFunc()
281e41f4b71Sopenharmony_ci        })
282e41f4b71Sopenharmony_ci      Button ('Close Second Dialog Box')
283e41f4b71Sopenharmony_ci        .onClick(() => {
284e41f4b71Sopenharmony_ci          if (this.controllerTwo != undefined) {
285e41f4b71Sopenharmony_ci            this.controllerTwo.close()
286e41f4b71Sopenharmony_ci          }
287e41f4b71Sopenharmony_ci        })
288e41f4b71Sopenharmony_ci        .margin(20)
289e41f4b71Sopenharmony_ci    }
290e41f4b71Sopenharmony_ci  }
291e41f4b71Sopenharmony_ci}
292e41f4b71Sopenharmony_ci
293e41f4b71Sopenharmony_ci@CustomDialog
294e41f4b71Sopenharmony_cistruct CustomDialogExample {
295e41f4b71Sopenharmony_ci  @BuilderParam childBuilderFunc: ()=>void = customDialogBuilderFunc;
296e41f4b71Sopenharmony_ci  childFunc: null | (()=>void) = null;
297e41f4b71Sopenharmony_ci  dialogControllerTwo: CustomDialogController | null = new CustomDialogController({
298e41f4b71Sopenharmony_ci    builder: CustomDialogExampleTwo({grandsonBuilderFunc: this.childBuilderFunc, grandsonFunc: this.childFunc!}),
299e41f4b71Sopenharmony_ci    alignment: DialogAlignment.Bottom,
300e41f4b71Sopenharmony_ci    offset: { dx: 0, dy: -25 } })
301e41f4b71Sopenharmony_ci  controller?: CustomDialogController;
302e41f4b71Sopenharmony_ci
303e41f4b71Sopenharmony_ci  build() {
304e41f4b71Sopenharmony_ci    Column() {
305e41f4b71Sopenharmony_ci      Button ('Open Second Dialog Box and close this box')
306e41f4b71Sopenharmony_ci        .onClick(() => {
307e41f4b71Sopenharmony_ci          this.controller!.close();
308e41f4b71Sopenharmony_ci          this.dialogControllerTwo!.open();
309e41f4b71Sopenharmony_ci        })
310e41f4b71Sopenharmony_ci        .margin(20)
311e41f4b71Sopenharmony_ci    }.borderRadius(10)
312e41f4b71Sopenharmony_ci  }
313e41f4b71Sopenharmony_ci}
314e41f4b71Sopenharmony_ci
315e41f4b71Sopenharmony_ci@Entry
316e41f4b71Sopenharmony_ci@Component
317e41f4b71Sopenharmony_cistruct CustomDialogUser {
318e41f4b71Sopenharmony_ci  @State inputValue: string = 'Click Me';
319e41f4b71Sopenharmony_ci  @State styleFlag: boolean = false;
320e41f4b71Sopenharmony_ci  @Builder parentBuilderFunc() {
321e41f4b71Sopenharmony_ci    if (this.styleFlag) {
322e41f4b71Sopenharmony_ci      Text(this.inputValue).fontSize(35)
323e41f4b71Sopenharmony_ci    }
324e41f4b71Sopenharmony_ci  }
325e41f4b71Sopenharmony_ci  parentFunc() {
326e41f4b71Sopenharmony_ci    this.styleFlag = !this.styleFlag;
327e41f4b71Sopenharmony_ci  }
328e41f4b71Sopenharmony_ci  dialogController: CustomDialogController | null = new CustomDialogController({
329e41f4b71Sopenharmony_ci    builder: CustomDialogExample({childBuilderFunc: this.parentBuilderFunc.bind(this), childFunc: this.parentFunc.bind(this),}),
330e41f4b71Sopenharmony_ci    cancel: this.exitApp,
331e41f4b71Sopenharmony_ci    autoCancel: true,
332e41f4b71Sopenharmony_ci    alignment: DialogAlignment.Bottom,
333e41f4b71Sopenharmony_ci    offset: { dx: 0, dy: -20 },
334e41f4b71Sopenharmony_ci    gridCount: 4,
335e41f4b71Sopenharmony_ci    customStyle: false
336e41f4b71Sopenharmony_ci  })
337e41f4b71Sopenharmony_ci
338e41f4b71Sopenharmony_ci
339e41f4b71Sopenharmony_ci  aboutToDisappear() {
340e41f4b71Sopenharmony_ci    this.dialogController = null;
341e41f4b71Sopenharmony_ci  }
342e41f4b71Sopenharmony_ci
343e41f4b71Sopenharmony_ci  onCancel() {
344e41f4b71Sopenharmony_ci    console.info('Callback when the first button is clicked');
345e41f4b71Sopenharmony_ci  }
346e41f4b71Sopenharmony_ci
347e41f4b71Sopenharmony_ci  onAccept() {
348e41f4b71Sopenharmony_ci    console.info('Callback when the second button is clicked');
349e41f4b71Sopenharmony_ci  }
350e41f4b71Sopenharmony_ci
351e41f4b71Sopenharmony_ci  exitApp() {
352e41f4b71Sopenharmony_ci    console.info('Click the callback in the blank area');
353e41f4b71Sopenharmony_ci  }
354e41f4b71Sopenharmony_ci  build() {
355e41f4b71Sopenharmony_ci    Column() {
356e41f4b71Sopenharmony_ci      Button(this.inputValue)
357e41f4b71Sopenharmony_ci        .onClick(() => {
358e41f4b71Sopenharmony_ci          if (this.dialogController != null) {
359e41f4b71Sopenharmony_ci            this.dialogController.open()
360e41f4b71Sopenharmony_ci          }
361e41f4b71Sopenharmony_ci        }).backgroundColor(0x317aff)
362e41f4b71Sopenharmony_ci    }.width('100%').margin({ top: 5 })
363e41f4b71Sopenharmony_ci  }
364e41f4b71Sopenharmony_ci}
365e41f4b71Sopenharmony_ci```
366e41f4b71Sopenharmony_ci
367e41f4b71Sopenharmony_ciExample of component freezing:
368e41f4b71Sopenharmony_ci
369e41f4b71Sopenharmony_ci```ts
370e41f4b71Sopenharmony_ci@Entry
371e41f4b71Sopenharmony_ci@Component
372e41f4b71Sopenharmony_cistruct Index {
373e41f4b71Sopenharmony_ci  @Builder
374e41f4b71Sopenharmony_ci  parentComponent() {
375e41f4b71Sopenharmony_ci    Third()
376e41f4b71Sopenharmony_ci  }
377e41f4b71Sopenharmony_ci  build() {
378e41f4b71Sopenharmony_ci    Column() {
379e41f4b71Sopenharmony_ci      Second({childBuilderParam: this.parentComponent.bind(this)})
380e41f4b71Sopenharmony_ci    }.width('100%').margin({ top: 5 })
381e41f4b71Sopenharmony_ci  }
382e41f4b71Sopenharmony_ci}
383e41f4b71Sopenharmony_ci
384e41f4b71Sopenharmony_ci@Component({freezeWhenInactive: true})
385e41f4b71Sopenharmony_cistruct Second {
386e41f4b71Sopenharmony_ci  @BuilderParam childBuilderParam: ()=>void;
387e41f4b71Sopenharmony_ci  build() {
388e41f4b71Sopenharmony_ci    Column() {
389e41f4b71Sopenharmony_ci      this.childBuilderParam();
390e41f4b71Sopenharmony_ci    }.width('100%').margin({ top: 5 })
391e41f4b71Sopenharmony_ci  }
392e41f4b71Sopenharmony_ci}
393e41f4b71Sopenharmony_ci
394e41f4b71Sopenharmony_ci@Component
395e41f4b71Sopenharmony_cistruct Third {
396e41f4b71Sopenharmony_ci  @State message: string = '111';
397e41f4b71Sopenharmony_ci  build() {
398e41f4b71Sopenharmony_ci    Column() {
399e41f4b71Sopenharmony_ci      Text(this.message)
400e41f4b71Sopenharmony_ci    }.width('100%').margin({ top: 5 })
401e41f4b71Sopenharmony_ci  }
402e41f4b71Sopenharmony_ci}
403e41f4b71Sopenharmony_ci```
404e41f4b71Sopenharmony_ci
405e41f4b71Sopenharmony_ci**Start API Level**
406e41f4b71Sopenharmony_ci
407e41f4b71Sopenharmony_ci9
408e41f4b71Sopenharmony_ci
409e41f4b71Sopenharmony_ci**Change Since**
410e41f4b71Sopenharmony_ci
411e41f4b71Sopenharmony_ciOpenHarmony SDK version 5.0.0.24
412e41f4b71Sopenharmony_ci
413e41f4b71Sopenharmony_ci**Key API/Component Changes**
414e41f4b71Sopenharmony_ci
415e41f4b71Sopenharmony_ci@Builder
416e41f4b71Sopenharmony_ci
417e41f4b71Sopenharmony_ci**Adaptation Guide**
418e41f4b71Sopenharmony_ci
419e41f4b71Sopenharmony_ciThis change is a compatibility improvement. No adaptation is required.
420e41f4b71Sopenharmony_ci
421e41f4b71Sopenharmony_ci## cl.arkui.7 Change in the Rule for Handling Boundary Values of the Menu Component's radius API
422e41f4b71Sopenharmony_ci
423e41f4b71Sopenharmony_ci**Access Level**
424e41f4b71Sopenharmony_ci
425e41f4b71Sopenharmony_ciPublic API
426e41f4b71Sopenharmony_ci
427e41f4b71Sopenharmony_ci**Reason for Change**
428e41f4b71Sopenharmony_ci
429e41f4b71Sopenharmony_ciEnhancement of UX specifications.
430e41f4b71Sopenharmony_ci
431e41f4b71Sopenharmony_ci**Change Impact**
432e41f4b71Sopenharmony_ci
433e41f4b71Sopenharmony_ciThis change is non-compatible.
434e41f4b71Sopenharmony_ci
435e41f4b71Sopenharmony_ciBefore the change: When the sum of the two maximum corner radii in the horizontal direction is greater than or equal to the menu's width, all four corners of the menu use the menu's default corner radius value.
436e41f4b71Sopenharmony_ci
437e41f4b71Sopenharmony_ciAfter the change: When the sum of the two maximum corner radii in the horizontal direction is greater than the menu's width, or when the sum of the two maximum corner radii in the vertical direction is greater than the menu's height, all four corners of the menu use the menu's default corner radius value.
438e41f4b71Sopenharmony_ci
439e41f4b71Sopenharmony_ci**API Level**
440e41f4b71Sopenharmony_ci
441e41f4b71Sopenharmony_ci12
442e41f4b71Sopenharmony_ci
443e41f4b71Sopenharmony_ci**Change Since**
444e41f4b71Sopenharmony_ci
445e41f4b71Sopenharmony_ciOpenHarmony SDK version 5.0.0.24
446e41f4b71Sopenharmony_ci
447e41f4b71Sopenharmony_ci**Key API/Component Changes**
448e41f4b71Sopenharmony_ci
449e41f4b71Sopenharmony_ciThe radius interface within the Menu component.
450e41f4b71Sopenharmony_ci
451e41f4b71Sopenharmony_ci**Adaptation Guide**
452e41f4b71Sopenharmony_ci
453e41f4b71Sopenharmony_ciIf the expectation is to use the menu's default corner radius, there is no need to set the radius property for the **Menu** component.
454e41f4b71Sopenharmony_ci
455e41f4b71Sopenharmony_ciIf a custom corner radius is expected, it can be set through the radius interface with a custom value that does not exceed the boundary values.
456e41f4b71Sopenharmony_ci
457e41f4b71Sopenharmony_ci## cl.arkui.8 Specification Change for RichEditor's onWillChange and onDidChange Interfaces
458e41f4b71Sopenharmony_ci
459e41f4b71Sopenharmony_ci**Access Level**
460e41f4b71Sopenharmony_ci
461e41f4b71Sopenharmony_ciPublic API
462e41f4b71Sopenharmony_ci
463e41f4b71Sopenharmony_ci**Reason for Change**
464e41f4b71Sopenharmony_ci
465e41f4b71Sopenharmony_ciEnhancement of interface capabilities.
466e41f4b71Sopenharmony_ci
467e41f4b71Sopenharmony_ci**Change Impact**
468e41f4b71Sopenharmony_ci
469e41f4b71Sopenharmony_ciThis change is non-compatible.
470e41f4b71Sopenharmony_ci
471e41f4b71Sopenharmony_ciBefore the change:
472e41f4b71Sopenharmony_ci
473e41f4b71Sopenharmony_ciThe parameter of the **OnWillChange** callback function, **RichEditorChangeValue**, was information about the replaced span and the new span.
474e41f4b71Sopenharmony_ciThe return value of the **OnDidChange** callback function was information about the new span.
475e41f4b71Sopenharmony_ci
476e41f4b71Sopenharmony_ciAfter the change:
477e41f4b71Sopenharmony_ci
478e41f4b71Sopenharmony_ciThe parameter of the **OnWillChange** callback function, **RichEditorChangeValue**, is the index range of the replaced content and information about the new span.
479e41f4b71Sopenharmony_ciThe return value of the **OnDidChange** callback function is the index range of the replaced content and the index range of the new content.
480e41f4b71Sopenharmony_ci
481e41f4b71Sopenharmony_ci**API Level**
482e41f4b71Sopenharmony_ci
483e41f4b71Sopenharmony_ci12
484e41f4b71Sopenharmony_ci
485e41f4b71Sopenharmony_ci**Change Since**
486e41f4b71Sopenharmony_ci
487e41f4b71Sopenharmony_ciOpenHarmony SDK version 5.0.0.24
488e41f4b71Sopenharmony_ci
489e41f4b71Sopenharmony_ci**Key API/Component Changes**
490e41f4b71Sopenharmony_ci
491e41f4b71Sopenharmony_ciThe OnWillChange and OnDidChange interfaces of RichEditor.
492e41f4b71Sopenharmony_ci
493e41f4b71Sopenharmony_ci**Adaptation Guide**
494e41f4b71Sopenharmony_ci
495e41f4b71Sopenharmony_ciSee [RichEditor](../../../application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-richeditor.md#example17) for the usage of the enhanced APIs.
496e41f4b71Sopenharmony_ci<!--no_check-->
497e41f4b71Sopenharmony_ci
498