1# ArkUI子系统Changelog 2 3## cl.arkui.1 在字节码HAR中通过router.getState()获取的path内容变更 4 5**访问级别** 6 7公开接口 8 9**变更原因** 10 11当开发者使用中间码HAR升级到字节码HAR时,通过router.getState()方法获取的path信息不正确。 12 13**变更影响** 14 15该变更为不兼容变更。 16 17此不兼容变更的前提是:源码HAR或者中间码HAR升级为字节码HAR时产生的不兼容。 18 19不兼容场景示例1: 20 21变更前: 22 23当开发者使用的是源码HAR时使用router.getState()方法获取的是**相对路径**。 24 25 26 27通过router.getState()方法获取的path信息为"../../../../library/src/main/ets/components/"。 28 29当开发者把源码HAR升级为字节码HAR时,通过router.getState()方法获取的path信息为"/\_\_harDefaultPagePath\_\_",不能获取正确的name和path值。 30 31 32 33变更后: 34 35当开发者把源码HAR升级为字节码HAR时使用router.getState()方法获取的是**绝对路径**。 36 37 38 39通过router.getState()方法获取的path信息为"library/src/main/ets/components/"。 40 41不兼容场景示例2: 42 43变更前: 44 45当开发者使用的是中间码HAR时使用router.getState()方法获取的是**相对路径**。 46 47 48 49通过router.getState()方法获取的path信息为"../../../../ + 哈希值 + library/src/main/ets/components/"。 50 51当开发者把中间码HAR升级为字节码HAR时,通过router.getState()方法获取的path信息为"/\_\_harDefaultPagePath\_\_",不能获取正确的name和path值。 52 53 54 55变更后: 56 57当开发者把中间码HAR升级为字节码HAR时使用router.getState()方法获取的是**绝对路径**。 58 59 60 61通过router.getState()方法获取的path信息为"library/src/main/ets/components/"。 62 63**起始API Level** 64 65API 10 66 67**变更发生版本** 68 69从OpenHarmony SDK 5.0.0.49开始 70 71**变更的接口/组件** 72 73router.getState() 74 75**适配指导** 76 77当开发者在代码中有通过router.getState()使用path值时,需要根据获取到的内容进行整改。 78 79## cl.arkui.2 禁止在转场动画过程中,更新消失节点的属性。 80 81**访问级别** 82 83公开接口 84 85**变更原因** 86 87在转场动画过程中改变正在消失节点的属性,可能造成数据访问异常,产生crash。例如,动画过程中将data置为undefined,Text组件增加默认转场不会立即被删除,在更新状态时,数据访问异常产生crash。因此,需要变更为在转场动画过程中,禁止更新消失节点的属性。 88 89``` 90class Mydata { 91 str: string; 92 constructor(str: string) { 93 this.str = str; 94 } 95} 96@State data: Mydata|undefined = new MyData("branch"); 97if (this.data) { 98 // 对于删除时增加的默认转场,会延长组件生命周期。Text没有立即被删除,而是等转场动画结束后才被删除 99 Text(this.data.str) 100} 101Button("play with animation") 102 .onClick(()=>{ 103 animateTo({},()=>{ 104 if (this.data) { 105 // 在动画过程中,会给if下的第一层组件增加默认转场 106 this.data = undefined; 107 } 108 }) 109 }) 110 111``` 112 113**变更影响** 114 115该变更为不兼容变更。 116 117变更前:转场动画过程中,正在消失的节点可以更新属性。 118 119变更后:转场动画过程中,禁止消失的节点更新属性。 120 121**起始API Level** 122 123API 10 124 125**变更发生版本** 126 127从OpenHarmony 5.0.0.49 版本开始。 128 129**变更的接口/组件** 130 131transition属性 132 133**适配指导** 134 135如果要对转场动画过程中,消失的节点进行属性更新,应当在节点下树之前产生,而不是在消失过程中。 136 137示例: 138 139``` 140@Entry 141@Component 142struct Index { 143 @State flag: Boolean = true; 144 @State color: Color = Color.Red; 145 build() { 146 Column(){ 147 if (this.flag) { 148 Text('abc') 149 .transition(TransitionEffect.OPACITY) 150 .backgroundColor(this.color) 151 } 152 153 Button("play with animation") 154 .onClick(()=>{ 155 // 变更前,消失过程中的节点可以更新属性,Text组件的颜色在消失过程中变为蓝色 156 // animateTo({},()=>{ 157 // this.flag ? this.color = Color.Blue : this.color = Color.Red; 158 // this.flag = !this.flag; 159 // }) 160 161 // 变更后,消失过程中的节点无法更新属性,Text组件的颜色在消失过程中一直为红色 162 // 如果需要更新属性,使Text组件的颜色在消失过程中变为蓝色,应当在节点下树之前更新 163 animateTo({},()=>{ 164 this.flag ? this.color = Color.Blue : this.color = Color.Red; 165 }) // 节点下树前改变颜色属性 166 animateTo({},()=>{ 167 this.flag = !this.flag; 168 }) 169 }) 170 .width("100%") 171 .padding(10) 172 } 173 } 174} 175``` 176 177## cl.arkui.3 Tabs组件barOverlap接口默认效果变更 178 179**访问级别** 180 181公开接口 182 183**变更原因** 184 185优化Tabs组件barOverlap属性设置为true时,TabBar的模糊效果和渲染性能。 186 187**变更影响** 188 189该变更为不兼容变更。 190 191变更前:设置barOverlap属性为true时,TabBar默认背景色修改为'#F2F1F3F5'并添加模糊效果。 192 193变更后:设置barOverlap属性为true时,TabBar默认模糊材质的BlurStyle值修改为'BlurStyle.COMPONENT_THICK'。 194 195| 变更前 | 变更后 | 196|------ |--------| 197||| 198 199**起始API Level** 200 201API 10 202 203**变更发生版本** 204 205从OpenHarmony 5.0.0.49 版本开始。 206 207**变更的接口/组件** 208 209barOverlap接口 210 211**适配指导** 212 213当barOverlap设置为true时,开发者若期望无模糊效果,设置barBackgroundBlurStyle为BlurStyle.NONE。示例如下: 214 215```ts 216@Entry 217@Component 218struct barHeightTest { 219 @State arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 220 build() { 221 Column() { 222 Tabs({ barPosition: BarPosition.End }) { 223 TabContent() { 224 Column() { 225 List({ space: 10 }) { 226 ForEach(this.arr, (item: number) => { 227 ListItem() { 228 Text("item" + item).width('80%').height(200).fontSize(16).textAlign(TextAlign.Center).backgroundColor('#fff8b81e') 229 } 230 }, (item: string) => item) 231 }.width('100%').height('100%') 232 .lanes(2).alignListItem(ListItemAlign.Center) 233 }.width('100%').height('100%') 234 .backgroundColor(Color.Pink) 235 } 236 .tabBar(new BottomTabBarStyle($r('sys.media.ohos_icon_mask_svg'), "测试0")) 237 238 TabContent() { 239 Column() { 240 List({ space: 10 }) { 241 ForEach(this.arr, (item: number) => { 242 ListItem() { 243 Text("item" + item).width('80%').height(200).fontSize(16).textAlign(TextAlign.Center).backgroundColor('#fff8b81e') 244 } 245 }, (item: string) => item) 246 }.width('100%').height('100%') 247 .lanes(2).alignListItem(ListItemAlign.Center) 248 }.width('100%').height('100%') 249 .backgroundColor(Color.Blue) 250 } 251 .tabBar(new BottomTabBarStyle($r('sys.media.ohos_icon_mask_svg'), "测试1")) 252 } 253 .barOverlap(true) 254 .barBackgroundBlurStyle(BlurStyle.NONE) // 关闭TabBar模糊效果 255 } 256 } 257} 258``` 259 260## cl.arkui.4 小窗模式下,获取组件相对于屏幕位置的接口,其返回值变更为正确的位置 261 262**访问级别** 263 264公开接口 265 266**变更原因** 267 268小窗模式下,获取组件相对于屏幕位置的接口在获取组件相对于屏幕的位置时,不会自动按照窗口的缩放比例进行缩放,返回值错误。 269 270**变更影响** 271 272该变更不涉及应用适配。 273 274变更前:在小窗模式下,获取组件相对于屏幕的位置时,不会自动按照窗口的缩放比例进行缩放,计算的位置仍然是将窗口作为全屏展示时的位置。 275 276变更后:在小窗模式下,获取组件相对于屏幕的位置时,会自动按照窗口的缩放比例进行缩放。 277 278**起始API Level** 279 280API 12 281 282**变更发生版本** 283 284从OpenHarmony SDK 5.0.0.49开始。 285 286**变更的接口/组件** 287 288ArkTS API: getPositionToScreen, getPositionToScreenWithTransform 289 290C API: OH_ArkUI_NodeUtils_GetLayoutPositionInScreen, OH_ArkUI_NodeUtils_GetPositionWithTranslateInScreen 291 292**适配指导** 293 294默认行为变更,无需适配,但应注意变更后的行为是否对整体应用逻辑产生影响。 295 296## cl.arkui.6 setSpecificSystemBarEnabled接口在横屏的行为变更 297 298**访问级别** 299 300公开接口 301 302**变更原因** 303 304修复该接口当前的实现bug。 305 306当前行为:应用窗口处于横屏状态时,应用使用该接口设置状态栏显隐不生效,状态栏始终处于隐藏状态。 307 308变更之后的行为:应用启动之后,若使用该接口设置过状态栏的显隐,状态栏的显隐状态则以应用的设置(多次设置,以最后一次设置状态为准)为准来生效。 309 310**变更影响** 311 312该变更为不兼容变更。 313 314可能产生的影响:应用预期在横屏时隐藏状态栏,该接口行为变更后应用横屏时状态栏可能因为应用自启动之后使用该接口主动设置过状态栏显示而变为显示状态。 315 316**起始API Level** 317 318API 12 319 320**变更发生版本** 321 322从OpenHarmony SDK 5.0.0.49开始 323 324**变更的接口/组件** 325 326Window#setSpecificSystemBarEnabled(name: SpecificSystemBar, enable: boolean, enableAnimation?: boolean): Promise\<void\> 327 328**适配指导** 329 330针对应用预期在横屏时隐藏状态栏的场景,需确认应用自启动之后是否使用该接口主动设置过状态栏显示,若应用设置过状态栏显示,需再次设置状态栏隐藏,才能实现应用横屏时隐藏状态栏。