【每日学点HarmonyOS Next知识】路由栈问题、图片圆角、颜色资源转十六进制字符串、数据集变化崩溃、组件声明周期

1、HarmonyOS app退到后台再进入,Navigation就会退到栈底并重新渲染?

可能原因

在使用Navigation做路由时,当应用退到后台再进入Navigation时,页面会退到栈底并重新渲染,这是因为Navigation组件默认情况下会隐藏导航栏,只有在栈顶元素被弹出时才会重新显示导航栏问题原因

  1. 导航栏隐藏:Navigation组件默认会隐藏导航栏,只有在栈顶元素被弹出时才会重新显示导航栏。这意味着当应用退到后台时,导航栏会被隐藏,再次进入时需要重新显示导航栏,从而导致页面重新渲染
  2. 栈管理:当应用退到后台时,当前页面的状态会被保存在路由栈中,再次进入时会从栈底开始恢复页面状态,这也会导致页面重新渲染

解决方法

  1. 设置hideTitleBar为false:可以在Navigation组件中设置hideTitleBar属性为false,以避免导航栏在应用退到后台时被隐藏。具体设置方法如下: - 在Navigation组件中,将hideTitleBar属性设置为true。 - 或者使用NavDestination组件时,将hideTitleBar属性设置为true。
  2. 使用pushDestinationByName方法:可以使用pushDestinationByName方法将当前页面推入栈中,并确保页面在栈顶,从而避免页面重新渲染。具体方法如下:

使用pushDestinationByName方法将当前页面推入栈中,确保页面在栈顶。确保在页面出栈时使用onPop回调处理返回结果,以避免页面重新渲染。通过以上方法,可以有效避免应用退到后台再进入Navigation时页面重新渲染的问题。

2、HarmonyOS 在使用borderimage的前提下,如何设置圆角?

参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-attributes-border-image-V5

borderImage(value: BorderImageOption)

设置组件的图片边框。

通过borderImage接口为组件设置渐变色边框示例:

复制代码
// xxx.ets
@Entry
@Component
struct Index {
  build() {
    Row() {
      Column() {
        Text('This is gradient color.').textAlign(TextAlign.Center).height(50).width(200)
          .borderImage({
            source: {
              angle: 90,
              direction: GradientDirection.Left,
              colors: [[0xAEE1E1, 0.0], [0xD3E0DC, 0.3], [0xFCD1D1, 1.0]]
            },
            slice: { top: 10, bottom: 10, left: 10, right: 10 },
            width: { top: "10px", bottom: "10px", left: "10px", right: "10px" },
            repeat: RepeatMode.Stretch,
            fill: false
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}
3、HarmonyOS ResourceColor 转16进制 string?

能提供个 ResourceColor 转16进制 string 方法吗?

通过resourceManager中的getColorSync获得对应颜色的十进制数,再转16进制参考demo:

复制代码
let resource: resourceManager.Resource = {
  bundleName: "com.example.helloworld",
  moduleName: "entry",
  id: $r('app.color.start_window_background').id
};
let colorNumber = this.context.resourceManager.getColorSync(resource);
let colorString = colorNumber.toString(16)
console.log(colorString);

参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-resource-manager-V5#getcolorsync10

getColorSync(resId: number) : number;

用户获取指定资源ID对应的颜色值,使用同步方式返回。

4、HarmonyOS IDataSource的onDatasetChange()崩溃?

IDataSource的onDatasetChange()崩溃Error message:onDatasetChange cannot be used with other interface

在使用LazyForEach组件时,如果尝试使用onDatasetChange方法进行数据集的批量修改操作,会出现错误消息onDatasetChange cannot be used with other interface。这是因为onDatasetChange方法不能与其他操作数据的接口混用。原因解释:

1、onDatasetChange方法用于通知LazyForEach组件进行批量的数据处理。该方法接受一个包含多个数据操作的数组作为参数。这些操作可以包括数据的添加、删除、移动等。当你尝试在onDatasetChange中传入包含删除操作的数据集时,系统会认为这是一个不兼容的操作,从而导致崩溃。这是因为onDatasetChange方法不支持与其他操作数据的接口混用。

使用其他方法:

1、避免在onDatasetChange中包含删除操作。你可以将删除操作单独进行,然后使用onDataDelete方法通知LazyForEach组件删除数据。

2、分开进行操作:如果需要同时进行添加、删除、移动等操作,可以将这些操作分别进行,而不是混在一起使用onDatasetChange方法。例如,先调用onDataAdd、onDataDelete和onDataMove方法,然后再调用onDataReloaded方法进行刷新。通过以上方法,可以避免onDatasetChange方法的崩溃问题,确保LazyForEach组件能够正确处理数据的变化。

5、HarmonyOS 在页面实际显示时做一些事,比如组件显示时就播放,隐藏就暂停?

onPageShow 页面每次显示触发。onPageHide 页面每次隐藏触发。参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-custom-component-lifecycle-V5

自定义组件的生命周期回调函数用于通知用户该自定义组件的生命周期,这些回调函数是私有的,在运行时由开发框架在特定的时间进行调用,不能从应用程序中手动调用这些回调函数。不要在多个窗口复用同一个自定义组件节点,其生命周期可能会紊乱。

相关推荐
黑臂麒麟18 小时前
HarmonyOS鸿蒙实战应用7:随手账本——数据导出与分享
华为·app·arkts·鸿蒙
贾伟康20 小时前
【天体运行模拟|11】HarmonyOS ArkTS 收藏与笔记实战:同步知识页和个人学习记录
harmonyos·arkts·preferences·多设备适配·arkdata
2501_9197490320 小时前
华为鸿蒙录音可视化APP—小羊声觉
华为·harmonyos·鸿蒙
大雷神21 小时前
HarmonyOS AR Engine深度估计实战——把毫米距离画成实时热力图
华为·ar·harmonyos
GKxx21 小时前
在 HarmonyOS 上给 QEMU 搭一个最小 aarch64 Linux guest(内核 + busybox initramfs)
linux·华为·qemu·harmonyos·鸿蒙·鸿蒙pc
黑臂麒麟21 小时前
屏幕信息全解析:HarmonyOS的分辨率、刷新率、折叠状态一个API搞定
华为·arkts·鸿蒙
黑臂麒麟21 小时前
HarmonyOS 网络连接诊断实战:检测网络状态、WiFi 切换、弱网监测一网打尽
网络·华为·arkts·鸿蒙
贾伟康1 天前
【天体运行模拟|08】HarmonyOS ArkTS 单位换算实战:处理天文尺度、科学计数与精度
harmonyos·arkts·arkui·数值精度·单位换算
lilian2331 天前
HarmonyOS 7 新特性(十三)|3DGS 模型加载、交互与性能回退
3d·交互·harmonyos
2501_919749031 天前
华为鸿蒙免费反诈APP—小羊反诈
华为·harmonyos·鸿蒙