HarmonyOS鸿蒙Next中如何通过Resource获取资源名称
HarmonyOS鸿蒙Next中如何通过Resource获取资源名称 一个组件的某个属性定义为 str: ResourceStr,想通过str获取到传入的资源名称。例如str传入了$r(“app.media.icon_star”), 则需要获取到 “icon_star”
尊敬的开发者,您好!该功能正在规划中,还请关注后续版本,感谢您的理解与支持。
更多关于HarmonyOS鸿蒙Next中如何通过Resource获取资源名称的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
这是demo,后缀改为zip,使用release模式构建library后引用构建后的har再运行
尊敬的开发者,您好!该功能正在规划中,还请关注后续版本,感谢您的理解与支持。
现在有个项目,打包时需要开启混淆,内部有个组件,组件有个属性aProp: ResourceStr,组件内部需要获取aProp的原始值,所以写了个方法getResourceValue
resourceManager = this.getUIContext().getHostContext()?.resourceManager
function getResourceValue(str: ResourceStr){
if(typeof str === "string"){
return str
}
return this.resourceManager.getStringSync(str.id)
}
但是文档说getStringSync不支持混淆,推荐我使用getStringByNameSync,所以需要改成
resourceManager = this.getUIContext().getHostContext()?.resourceManager
function getResourceValue(str: ResourceStr){
if(typeof str === "string"){
return str
}
return this.resourceManager.getStringByNameSync(str.resName) // 假设有resName属性
}
所以需要获取传入的资源的名称。而且我觉得既然Resource是个对象,就应该有个resName属性。
目前HarmonyOS不支持获取$r(“app.media.icon_star”)资源的名称,
提上去,赶紧支持,
在HarmonyOS Next中,通过Resource对象获取资源名称,可以使用ResourceManager。首先获取资源管理器实例,然后调用getResourceName方法并传入资源ID。该方法会返回一个ResourceName对象,其中包含资源的类型、名称等信息。具体操作需在代码中导入ohos.global.resource相关模块。
在HarmonyOS Next中,可以通过ResourceManager解析Resource对象来获取资源名称。核心方法是使用getResourceName。
具体实现如下:
import { resourceManager } from '@kit.ResourceManagerKit';
// 假设 str 是 ResourceStr 类型
async function getResourceName(str: ResourceStr): Promise<string | undefined> {
try {
// 将 ResourceStr 转换为 Resource 对象
const resource: resourceManager.Resource = str as resourceManager.Resource;
// 获取资源管理器实例
const resMgr = resourceManager.getResourceManager();
// 获取资源名称
const resourceName = await resMgr.getResourceName(resource);
// resourceName 格式通常为 "type/name",如 "media/icon_star"
// 提取名称部分
if (resourceName) {
const parts = resourceName.split('/');
return parts.length > 1 ? parts[1] : parts[0];
}
} catch (error) {
console.error('Failed to get resource name:', error);
}
return undefined;
}
// 使用示例
const str = $r('app.media.icon_star');
const name = await getResourceName(str); // 返回 "icon_star"
关键点说明:
ResourceStr类型实际对应resourceManager.Resource对象getResourceName()方法返回的是完整资源标识,格式为资源类型/资源名称- 需要处理异步操作,相关API返回Promise
注意事项:
- 确保在资源管理器的上下文中调用
- 处理可能的异常情况
- 返回的名称不包含应用模块前缀(如
app.)和资源类型前缀,


