利用开发过程中,常常须要用到色彩、字体、间距、图片等资源,在不同的设施或配置中,这些资源的值可能不同。
- 利用资源:借助资源文件能力,开发者在利用中自定义资源,自行治理这些资源在不同的设施或配置中的体现。
- 系统资源:开发者间接应用零碎预置的资源定义(即分层参数,同一资源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学习材料,请点击→《鸿蒙根底入门学习指南》