Harmony OS Next封装公共资源访问方法

Laughing
2024-12-22 / 1 评论 / 134 阅读 / 正在检测是否收录...

在Harmony OS Next开发时,对于静态字符串常量,我们都是定义在resources文件夹下的string.json文件中,在日常访问时,通过$r进行访问,如下

Text($r("app.string.agree")).fontSize(14)

这种方式范围问你资源文件,只适用于有前端上下文的地方,比如我们前端页面或公共的组件中,如果我们在封装的公共方法中或者其他定义API的界面,这种方式是获取不到值的。

为了在所有地方都能获取到资源文件的值,我们可以借助应用上下文获取ResourceManager后,调用不同资源管理接口访问不同资源,比如还是上面的资源文件,我们可以通过

getContext().resourceManager.getStringSync($r("app.string.agree"))

当然,上面这段代码里面还是有应用的上下文信息getContext(),这个上下文不是一直都能取到的,为了便捷获取资源文件,我们可以将上下文信息存储到AppStorage中,这样通过定义一个公共方法,从AppStorage中获取到应用上下文信息即可。

一、存储上下文信息

在应用启动的时候,我们EntryAbility.ets文件中的onWindowStageCreate方法中,将应用上下文信息存储到AppStorage中。

AppStorage.setOrCreate('context', this.context);

二、定义获取资源文件的公共方法

/**
 * 获取string中的值
 * @param source 资源文件
 * @returns 值
 */
export function getStringFromResource(source: Resource) {
  let context = AppStorage.get('context') as common.UIAbilityContext
  let value = context.resourceManager.getStringSync(source.id)
  return value
}

三、使用

这样,我们在应用程序的任意位置就能访问资源文件了。

getStringFromResource($r("app.string.notify"))
0

评论 (1)

取消
  1. 头像
    79505393
    MacOS · Safari

    画图

    回复