在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"))
评论 (1)