资源访问方式

在harmonyOS里,我们对于资源访问是通过$r()和$rawfile()

例如:

Text($r('app.string.test_string'))

 Image($rawfile("testImage.png"))

在多人协作,多模块开发中,跨模块读取资源是必不可少的,接下来介绍几种跨模块资源调取的方式

在学习开始之前,我们建立har模块和hsp模块,并在资源目录下创建一些测试资源

跨HAR/HSP包调用资源

 语法:$r('[模块名].string.test_string') 和$rawfile('模块名].testImage.png')

Text($r('[模块名'].string.test_string')) 
Image($rawfile('模块名'].testImage.png'))

[moduleName].type.name获取资源。其中,moduleName为hsp模块名,type为资源类型,name为资源名称。

HSP包的资源导出引用

在Hsp模块的index下,我们可以创建一个资源管理类,管理导出的资源

export class HspResManager{
  static getPic(): Resource{
    return $r('app.media.huawei');
  }
  static getHspstring(): Resource{
    return $r('app.string.Hspstring');
  }
}

在需要导入hsp资源的地方依赖该模块

demo

import {HspResManager}from 'hsp_library'

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
  @State har:string ='[har_library].string.har_string'

  build() {
    Tabs({barPosition:BarPosition.End}){
        TabContent(){
          Column(){
            Text(this.message)
          }
        }
        .tabBar('entry模块')
      TabContent(){
        Column(){
          Text($r(this.har))
        }
      }
      .tabBar('HAR模块')
      TabContent(){
          Column(){
            Text(HspResManager.getHspstring())
              .fontSize(20)
            Image(HspResManager.getPic())
              .height(100)
          }

      }
      .tabBar('HSP模块')
    }
    .height('100%')
    .width('100%')
  }
}

结语

举个例子,在实际开发中,例如多个模块都要用到背景图片,调用公共模块的图片资源总比各个单独的资源目录下。除此之外,图标,提示音,还有许多场景会出现资源重合的问题,重复的媒体资源会占用不必要的存储空间,增加应用大小,降低用户下载欲望,后期更改也要更改多个地方,十分繁琐。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐