关于harmonyos:HarmonyOS资源分类与访问

7次阅读

共计 6110 个字符,预计需要花费 16 分钟才能阅读完成。

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

  • 利用资源:借助资源文件能力,开发者在利用中自定义资源,自行治理这些资源在不同的设施或配置中的体现。
  • 系统资源:开发者间接应用零碎预置的资源定义(即分层参数,同一资源 ID 在设施类型、深浅色等不同配置下有不同的取值)。

资源分类

利用开发中应用的各类资源文件,须要放入特定子目录中存储管理。资源目录的示例如下所示,base 目录、限定词目录、rawfile 目录称为资源目录,element、media、profile 称为资源组目录。

阐明
stage 模型多工程状况下,共有的资源文件放到 AppScope 下的 resources 目录。

资源目录示例:

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 文件中。文件名可自定义。

资源目录

base 目录

base 目录是默认存在的目录,二级子目录 element 用于寄存字符串、色彩、布尔值等根底元素,media、profile 寄存媒体、动画、布局等资源文件。

目录中的资源文件会被编译成二进制文件,并赋予资源文件 ID。通过指定资源类型(type)和资源名称(name)援用。

限定词目录

en_US 和 zh_CN 是默认存在的两个限定词目录,其余限定词目录须要开发者依据开发须要自行创立。二级子目录 element、media、profile 用于寄存字符串、色彩、布尔值等根底元素,以及媒体、动画、布局等资源文件。

同样,目录中的资源文件会被编译成二进制文件,并赋予资源文件 ID。通过指定资源类型(type)和资源名称(name)来援用。

限定词目录的命名要求

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

  • 限定词的组合程序:_挪动国家码_挪动网络码 - 语言_文字_国家或地区 - 横竖屏 - 设施类型 - 色彩模式 - 屏幕密度_。开发者能够依据利用的应用场景和设施特色,抉择其中的一类或几类限定词组成目录名称。
  • 限定词的连贯形式:语言、文字、国家或地区之间采纳下划线(_)连贯,挪动国家码和挪动网络码之间也采纳下划线(_)连贯,除此之外的其余限定词之间均采纳中划线(-)连贯。例如:zh_Hant_CN、zh_CN-car-ldpi。
  • 限定词的取值范畴:每类限定词的取值必须合乎限定词取值要求表中的条件,如表 2。否则,将无奈匹配目录中的资源文件。

表 2 限定词取值要求

rawfile 目录

反对创立多层子目录,目录名称能够自定义,文件夹内能够自在搁置各类资源文件。

目录中的资源文件会被间接打包进利用,不通过编译,也不会被赋予资源文件 ID。通过指定文件门路和文件名援用。

资源组目录

资源组目类型包含 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 目录的对应资源组。如果抉择了限定词,则会依照命名标准主动生成限定词和资源组目录,并将文件创建在限定词目录中。

图中 File name 为须要创立的文件名。Resource type 为资源组类型,默认是 element。Root Element 为资源类型。Avaliable qualifiers 为供选择的限定词目录,通过左边的小箭头可增加或者删除。

创立的目录名主动生成,格局固定为“限定词. 资源组”,例如:创立一个限定词为 dark 的 element 目录,主动生成的目录名称为“dark.element”。

创立资源目录

在 resources 目录右键菜单抉择“New > Resource Directory”,可创立资源目录,默认创立的是 base 目录。如果抉择了限定词,则会依照命名标准主动生成限定词和资源组目录。确定限定词后,抉择资源组类型,以后资源组类型反对 Element、Media、Profile 三种,创立后生成资源目录。

创立资源文件

在资源目录(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,可通过资源

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

资源的具体应用办法如下:

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。

阐明

  • 仅申明式开发范式反对应用系统资源。
  • 对于零碎预置利用,倡议应用系统资源;对于三方利用,能够依据须要抉择应用系统资源或自定义利用资源。
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)

资源匹配

利用应用某资源时,零碎会依据以后设施状态优先从相匹配的限定词目录中寻找该资源。只有当 resources 目录中没有与设施状态匹配的限定词目录,或者在限定词目录中找不到该资源时,才会去 base 目录中查找。rawfile 是原始文件目录,不会依据设施状态去匹配不同的资源。

限定词目录与设施状态的匹配规定

  • 在为设施匹配对应的资源文件时,限定词目录匹配的优先级从高到低顺次为:挪动国家码和挪动网络码 >
    区域(可选组合:语言、语言_文字、语言_国家或地区、语言_文字_国家或地区)> 横竖屏 > 设施类型 > 色彩模式 > 屏幕密度。
  • 如果限定词目录中蕴含挪动国家码和挪动网络码、语言、文字、横竖屏、设施类型、色彩模式限定词,则对应限定词的取值必须与以后的设施状态完全一致,该目录才可能参加设施的资源匹配。例如,限定词目录“zh_CN-car-ldpi”不能参加“en_US”设施的资源匹配。

作为一名合格一线开发程序员,大家心里必定会有很多疑难!鸿蒙零碎这么弱小~~

为了可能让大家跟上互联网时代的技术迭代,在这里跟大家分享一下我本人近期学习心得以及参考网上材料整顿出的一份最新版的鸿蒙学习晋升材料 ,有须要的小伙伴自行支付, 限时开源,先到先得~~~~

支付以下高清学习路线原图请点击→《鸿蒙全套学习指南》纯血鸿蒙 HarmonyOS 根底技能学习路线图

支付以上残缺高清学习路线图,请点击→《《鸿蒙 (Harmony OS)开发学习手册》》小编本人整顿的局部学习材料(蕴含有高清视频、开发文档、电子书籍等)

以上分享的学习路线都适宜哪些人跟着学习?
- 应届生 / 计算机专业通过学习鸿蒙新兴技术,入行互联网,将来高起点待业。
- 0 根底转行提前布局新方向,抓住风口,自我晋升,取得更多就业机会。
- 技术晋升 / 进阶跳槽倒退瓶颈期,晋升职场竞争力,疾速把握鸿蒙技术,享受蓝海红利。

最初

鸿蒙开发学习是一个系统化的过程,从基础知识的学习到实战技能的锻炼 ,再到对前沿技术的摸索,每一环节都至关重要。 心愿这份教程材料能帮忙大家疾速入门并在鸿蒙开发之路上步步攀升,成就一番事业。让咱们一起乘风破浪,拥抱鸿蒙生态的广大将来!

如果你感觉这篇内容对你有帮忙,我想麻烦大家动动小手给我:点赞,转发,有你们的『点赞和评论』,才是我发明的能源。

关注我,同时能够期待后续文章 ing,不定期分享原创常识。

想要获取更多残缺鸿蒙最新 VIP 学习材料,请点击→《鸿蒙根底入门学习指南》

正文完
 0