一文带你相识HarmonyOS Next资源及访问

[复制链接]
发表于 2025-11-15 12:17:49 | 显示全部楼层 |阅读模式
一文带你相识HarmonyOS Next资源及访问

1、配景先容

在应用开发中会用到各种各样的资源文件,字符串、图片、音视频媒体、颜色值、主题等。字符串偶然候会涉及到国际化的东西,而颜色图片大概涉及到主题切换的事变。
做过Android开发的都知道,在Android中有三种资源,一种是加入编译终极通过R文件访问的,放置在res下面,用于存放应用步伐的资源,包罗图标、GUI布局等。这些资源在打包时会被直接通过aapt(资源文件打包工具)处理惩罚,映射到Android工程的R文件中,天生R.资源文件对应的ID,通常都可以通过资源ID访问‌;另一种是raw,在res/raw下面,用于存放原始的、未经处理惩罚的资源文件,比方音频文件、视频文件和纯文本文件。这些文件在编译时不会被处理惩罚成其他格式,而是以原样生存。末了一种是assets,用于存放必要打包到应用步伐的静态文件,以便摆设到装备中,assets文件夹下的文件不会被编译成二进制文件,而是按原样复制到装备上‌。
HarmonyOS Next也提供了雷同的资源目次,内里存放必要用到颜色、字体、间距、图标等资源,在差别的装备或设置中,这些资源的值大概差别。下面先先容HarmonyOS Next的资源目次。
2、资源目次先容

HarmonyOS Next目次分为两种:


  • 资源目次:包罗base目次、限定词目次、rawfile目次、resfile目次
  • 资源组目次:包罗element、media、profile
    工程中资源布局如下图所示:

下面先容下各个目次的作用:


  • base目次:base目次是默认存在的目次,二级子目次element用于存放字符串、颜色、布尔值等底子元素,media、profile存放媒体、动画、布局等资源文件。目次中的资源文件会被编译成二进制文件,并赋予资源文件ID。通过指定资源范例(type)和资源名称(name)访问。雷同于Android的res目次。
  • 限定词目次:en_US和zh_CN是默认存在的两个限定词目次,别的限定词目次必要开发者根据开发必要自行创建。二级子目次element、media、profile用于存放字符串、颜色、布尔值等底子元素,以及媒体、动画、布局等资源文件。目次中的资源文件会被编译成二进制文件,并赋予资源文件ID。通过指定资源范例(type)和资源名称(name)来访问。限定词有以下几种:

    • 移动国家码和移动网络码
    • 语言
    • 笔墨
    • 国家或地域
    • 横竖屏
    • 装备范例
    • 颜色模式
    • 屏幕密度

  • rawfile目次:支持创建多层子目次,子目次名称可以自界说,文件夹内可以自由放置各类资源文件。目次中的资源文件会被直接打包进应用,不颠末编译,也不会被赋予资源文件ID。通过指定文件路径和文件名访问。
  • resfile目次:支持创建多层子目次,子目次名称可以自界说,文件夹内可以自由放置各类资源文件。目次中的资源文件会被直接打包进应用,不颠末编译,也不会被赋予资源文件ID。应用安装后,resfile资源会被解压到应用沙箱路径,通过Context属性resourceDir获取到resfile资源目次后,可通过文件路径访问。
3、资源访问

一样寻常在har包内,可以通过"$r"或"$rawfile"访问资源:


  • 对于“color”、“float”、“string”、“plural”、“media”、“profile”等范例的资源,通过"$r(‘app.type.name’)"情势访问。此中,app为resources目次中界说的资源;type为资源范例或资源的存放位置;name为资源名,开发者界说资源时确定。
  • 对于rawfile目次资源,通过"$rawfile(‘filename’)“情势访问。此中,filename为rawfile目次下文件的相对路径,文件名必要包罗后缀,路径开头不可以”/"开头。
  • 通过本应用上下文获取ResourceManager后,调用差别资源管理接口访问差别资源。比方:getContext().resourceManager.getStringByNameSync(‘test’) 可获取字符串资源;getContext().resourceManager.getRawFd(‘rawfilepath’) 可获取Rawfile地点hap包的descriptor信息,访问rawfile文件时需{fd, offset, length}一起使用。
这里有两个注意点:


  • 对于string.json中使用多个占位符的情况,通过$r('app.string.label','aaa','bbb',444)情势访问。
  • 通过资源id方式获取资源比直接通过资源获取性能更好。
对于跨HAP/HSP包应用资源的访问,通过createModuleContext(context, moduleName)接口创建同应用中差别module的上下文,获取resourceManager对象后,调用差别资源管理接口访问差别资源。通过"$r"或"$rawfile"访问资源
4、API先容

资源的访问体系提供了@ohos.resourceManager接口。
起首通过resourceManager.getResourceManager获取起首通过resourceManager,接着可以通过getStringSync、getMediaContent等接口,提供的接口如下图:



5、参考资料



  • 资源分类与访问
  • @ohos.resourceManager (资源管理)
6、总结

HarmonyOS Next提供了雷同Android的资源目次,包罗base、限定词和rawfile目次。base目次包罗编译后的二进制文件,而限定词目次根据差别语言或装备范例存放相应资源。rawfile目次直接打包原始文件,不颠末编译。资源可以通过$r或$rawfile访问,大概使用ResourceManager接口获取。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表