乐趣区

关于harmonyos:HarmonyOS应用开发资源分类与访问

利用开发过程中,常常须要用到色彩、字体、间距、图片等资源,在不同的设施或配置中,这些资源的值可能不同。

● 利用资源:借助资源文件能力,开发者在利用中自定义资源,自行治理这些资源在不同的设施或配置中的体现。

● 系统资源:开发者间接应用零碎预置的资源定义(即分层参数,同一资源 ID 在设施类型、深浅色等不同配置下有不同的取值)。

资源分类

resources 目录
利用开发中应用的各类资源文件,须要放入特定子目录中存储管理。resources 目录包含三大类目录,一类为 base 目录,一类为限定词目录,还有一类为 rawfile 目录。stage 模型多工程状况下共有的资源文件放到 AppScope 下的 resources 目录。

base 目录默认存在,而限定词目录须要开发者自行创立。利用应用某资源时,零碎会依据以后设施状态优先从相匹配的限定词目录中寻找该资源。只有当 resources 目录中没有与设施状态匹配的限定词目录,或者在限定词目录中找不到该资源时,才会去 base 目录中查找。rawfile 是原始文件目录,不会依据设施状态去匹配不同的资源。资源目录示例:

resources 
|---base 
|   |---element 
|   |   |---string.json 
|   |---media 
|   |   |---icon.png 
|   |---profile 
|   |   |---test_profile.json 
|---en_US  // 默认存在的目录,设施语言环境是美式英文时,优先匹配此目录下资源 
|   |---element 
|   |   |---string.json 
|   |---media 
|   |   |---icon.png 
|   |---profile 
|   |   |---test_profile.json 
|---zh_CN  // 默认存在的目录,设施语言环境是简体中文时,优先匹配此目录下资源 
|   |---element 
|   |   |---string.json 
|   |---media 
|   |   |---icon.png 
|   |---profile 
|   |   |---test_profile.json |---en_GB-vertical-car-mdpi // 自定义多限定词目录示例,由开发者创立 
|   |---element 
|   |   |---string.json 
|   |---media 
|   |   |---icon.png 
|   |---profile 
|   |   |---test_profile.json 
|---rawfile // 其余类型文件,原始文件模式保留,不会被集成到 resources.index 文件中。文件名可自定义。

表 1 resources 目录分类

限定词目录
限定词目录能够由一个或多个表征利用场景或设施特色的限定词组合而成,包含挪动国家码和挪动网络码、语言、文字、国家或地区、横竖屏、设施类型、色彩模式和屏幕密度等维度,限定词之间通过下划线(_)或者中划线(-)连贯。开发者在创立限定词目录时,须要把握限定词目录的命名要求,以及限定词目录与设施状态的匹配规定。

限定词目录的命名要求
● 限定词的组合程序:_挪动国家码_挪动网络码 - 语言_文字_国家或地区 - 横竖屏 - 设施类型 - 色彩模式 - 屏幕密度_。开发者能够依据利用的应用场景和设施特色,抉择其中的一类或几类限定词组成目录名称。

● 限定词的连贯形式:语言、文字、国家或地区之间采纳下划线(_)连贯,挪动国家码和挪动网络码之间也采纳下划线(_)连贯,除此之外的其余限定词之间均采纳中划线(-)连贯。例如:zh_Hant_CN、zh_CN-car-ldpi。

● 限定词的取值范畴:每类限定词的取值必须合乎限定词取值要求表中的条件,否则,将无奈匹配目录中的资源文件。

表 2 限定词取值要求

限定词目录与设施状态的匹配规定
● 在为设施匹配对应的资源文件时,限定词目录匹配的优先级从高到低顺次为:挪动国家码和挪动网络码 > 区域(可选组合:语言、语言_文字、语言_国家或地区、语言_文字_国家或地区)> 横竖屏 > 设施类型 > 色彩模式 > 屏幕密度。

● 如果限定词目录中蕴含挪动国家码和挪动网络码、语言、文字、横竖屏、设施类型、色彩模式限定词,则对应限定词的取值必须与以后的设施状态完全一致,该目录才可能参加设施的资源匹配。例如,限定词目录“zh_CN-car-ldpi”不能参加“en_US”设施的资源匹配。

资源组目录
base 目录与限定词目录上面能够创立资源组目录(包含 element、media、profile),用于寄存特定类型的资源文件,详见资源组目录阐明。

表 3 资源组目录阐明

媒体资源类型阐明
表 4 图片资源类型阐明

表 5 音视频资源类型阐明

资源文件示例
color.json 文件的内容如下:

{
    "color": [
        {
            "name": "color_hello",
            "value": "#ffff0000"
        },
        {
            "name": "color_world",
            "value": "#ff0000ff"
        }
    ]
}

float.json 文件的内容如下:

{
    "float":[
        {
            "name":"font_hello",
            "value":"28.0fp"
        },
    {
            "name":"font_world",
            "value":"20.0fp"
        }
    ]
}

string.json 文件的内容如下:

{
    "string":[
        {
            "name":"string_hello",
            "value":"Hello"
        },
    {
            "name":"string_world",
            "value":"World"
        },
    {
            "name":"message_arrive",
            "value":"We will arrive at %s."
        }
    ]
}

plural.json 文件的内容如下:

{
    "plural":[
        {
            "name":"eat_apple",
            "value":[
                {
                    "quantity":"one",
                    "value":"%d apple"
                },
                {
                    "quantity":"other",
                    "value":"%d apples"
                }
            ]
        }
    ]
}

资源拜访

利用资源

创立资源文件
在 resources 目录下,可依照限定词目录和资源组目录的阐明创立子目录和目录内的文件。

同时,DevEco Studio 也提供了创立资源目录和资源文件的界面。

● 创立资源目录及资源文件

在 resources 目录右键菜单抉择“New > Resource File”,此时可同时创立目录和文件。文件默认创立在 base 目录的对应资源组下。如果抉择了限定词,则会依照命名标准主动生成限定词 + 资源组目录,并将文件创建在目录中。图中 Avaliable qualifiers 为供选择的限定词目录,通过左边的小箭头可增加或者删除。File name 为须要创立的文件名,Resource type 为资源组类型,默认是 element。Root Element 为资源类型。创立的目录名主动生成,格局固定为“限定词. 资源组”,例如:创立一个限定词为 dark 的 element 目录,主动生成的目录名称为“dark.element”。

● 创立资源目录

在 resources 目录右键菜单抉择“New > Resource Directory”,此时可创立资源目录。资源目录创立的是 base 目录,也可依据需要创立其它限定词目录。确定限定词后,抉择资源组类型,以后资源组类型反对 Element、Media、Profile 三种,创立后主动生成目录名称。

● 创立资源文件

在资源目录的右键菜单抉择“New > XXX Resource File”,即可创立对应资源组目录的资源文件。例如,在 element 目录下可新建 Element Resource File。

拜访利用资源
在工程中,通过 ”$r(‘app.type.name’)” 的模式援用利用资源。app 代表是利用内 resources 目录中定义的资源;type 代表资源类型(或资源的寄存地位),能够取“color”、“float”、“string”、“plural”、“media”,name 代表资源命名,由开发者定义资源时确定。

援用 rawfile 下资源时应用 ”$rawfile(‘filename’)” 的模式,filename 须要示意为 rawfile 目录下的文件相对路径,文件名须要蕴含后缀,门路结尾不能够以 ”/” 结尾。拜访 rawfile 文件的 descriptor 时,可应用资源管理 getRawFd 接口,其返回值 descriptor.fd 为 hap 包的 fd,拜访此 rawfile 文件须要联合 {fd, offset, length} 一起应用。

阐明
资源描述符不能拼接应用,仅反对一般字符串如 ’app.type.name’。$r 返回值为 Resource 对象,可通过 getStringValue 办法获取对应的字符串。

在 xxx.ets 文件中,能够应用在 resources 目录中定义的资源。资源分类中资源组目录下的“资源文件示例”显示了.json 文件内容,蕴含 color.json 文件、float.json 文件、string.json 和 plural.json 文件。利用资源的具体应用办法如下:

Text($r('app.string.string_hello'))
  .fontColor($r('app.color.color_hello'))
  .fontSize($r('app.float.font_hello'))

Text($r('app.string.string_world'))
  .fontColor($r('app.color.color_world'))
  .fontSize($r('app.float.font_world'))

// 援用 string.json 资源。Text 中 $r 的第一个参数指定 string 资源,第二个参数用于替换 string.json 文件中的 %s。// 如下示例代码 value 为 "We will arrive at five of the clock"。Text($r('app.string.message_arrive', "five of the clock"))
  .fontColor($r('app.color.color_hello'))
  .fontSize($r('app.float.font_hello'))

// 援用 plural$ 资源。Text 中 $r 的第一个指定 plural 资源,第二个参数用于指定单复数(在中文,单复数均应用 other。在英文,one:代表复数,取值为 1;other:代表复数,取值为大于等于 1 的整数),第三个参数用于替换 %d
// 如下示例代码为复数,value 为 "5 apples"。Text($r('app.plural.eat_apple', 5, 5))
  .fontColor($r('app.color.color_world'))
  .fontSize($r('app.float.font_world'))

Image($r('app.media.my_background_image'))  // media 资源的 $r 援用

Image($rawfile('test.png'))                 // rawfile$r 援用 rawfile 目录下图片

Image($rawfile('newDir/newTest.png'))       // rawfile$r 援用 rawfile 目录下图片

系统资源

系统资源蕴含色调、圆角、字体、间距、字符串及图片等。通过应用系统资源,不同的开发者能够开发出具备雷同视觉格调的利用。

开发者能够通过“$r(‘sys.type.resource_id’)”的模式援用系统资源。sys 代表是系统资源;type 代表资源类型,能够取“color”、“float”、“string”、“media”;resource_id 代表资源 id。

阐明
● 仅申明式开发范式反对应用系统资源,类 Web 开发范式不反对。

Text('Hello')
  .fontColor($r('sys.color.ohos_id_color_emphasize'))
  .fontSize($r('sys.float.ohos_id_text_size_headline1'))
  .fontFamily($r('sys.string.ohos_id_text_font_family_medium'))
  .backgroundColor($r('sys.color.ohos_id_color_palette_aux1'))

Image($r('sys.media.ohos_app_icon'))
  .border({color: $r('sys.color.ohos_id_color_palette_aux1'),
    radius: $r('sys.float.ohos_id_corner_radius_button'), width: 2
  })
  .margin({top: $r('sys.float.ohos_id_elements_margin_horizontal_m'),
    bottom: $r('sys.float.ohos_id_elements_margin_horizontal_l')
  })
  .height(200)
  .width(300)
退出移动版