鸿蒙开发入门:资源分类与访问 资源分类与访问应用开发过程中经常需要用到颜色、字体、间距、图片等资源在不同的设备或配置中这些资源的值可能不同。应用资源借助资源文件能力开发者在应用中自定义资源自行管理这些资源在不同的设备或配置中的表现。系统资源开发者直接使用系统预置的资源定义即分层参数同一资源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 限定词取值要求限定词类型含义与取值说明移动国家码和移动网络码移动国家码MCC和移动网络码MNC的值取自设备注册的网络。MCC可与MNC合并使用使用下划线_连接也可以单独使用。例如mcc460表示中国mcc460_mnc00表示中国_中国移动。详细取值范围请查阅ITU-T E.212国际电联相关标准。语言表示设备使用的语言类型由2~3个小写字母组成。例如zh表示中文en表示英语mai表示迈蒂利语。详细取值范围请查阅ISO 639ISO制定的语言编码标准。文字表示设备使用的文字类型由1个大写字母首字母和3个小写字母组成。例如Hans表示简体中文Hant表示繁体中文。详细取值范围请查阅ISO 15924ISO制定的文字编码标准。国家或地区表示用户所在的国家或地区由2~3个大写字母或者3个数字组成。例如CN表示中国GB表示英国。详细取值范围请查阅ISO 3166-1ISO制定的国家和地区编码标准。横竖屏表示设备的屏幕方向取值如下- vertical竖屏- horizontal横屏设备类型表示设备的类型取值如下- car车机- tablet平板- tv智慧屏- wearable智能穿戴颜色模式表示设备的颜色模式取值如下- dark深色模式- light浅色模式屏幕密度表示设备的屏幕密度单位为dpi取值如下- sdpi表示小规模的屏幕密度Small-scale Dots Per Inch适用于dpi取值为(0, 120]的设备。- mdpi表示中规模的屏幕密度Medium-scale Dots Per Inch适用于dpi取值为(120, 160]的设备。- ldpi表示大规模的屏幕密度Large-scale Dots Per Inch适用于dpi取值为(160, 240]的设备。- xldpi表示特大规模的屏幕密度Extra Large-scale Dots Per Inch适用于dpi取值为(240, 320]的设备。- xxldpi表示超大规模的屏幕密度Extra Extra Large-scale Dots Per Inch适用于dpi取值为(320, 480]的设备。- xxxldpi表示超特大规模的屏幕密度Extra Extra Extra Large-scale Dots Per Inch适用于dpi取值为(480, 640]的设备。rawfile目录支持创建多层子目录目录名称可以自定义文件夹内可以自由放置各类资源文件。目录中的资源文件会被直接打包进应用不经过编译也不会被赋予资源文件ID。通过指定文件路径和文件名引用。资源组目录资源组目类型包括element、media、profile用于存放特定类型的资源文件。表3 资源组目录说明目录类型说明资源文件element表示元素资源以下每一类数据都采用相应的JSON文件来表征目录下仅支持文件类型。- boolean布尔型- color颜色- float浮点型- intarray整型数组- integer整型- pattern样式- plural复数形式- strarray字符串数组- string字符串element目录中的文件名称建议与下面的文件名保持一致。每个文件中只能包含同一类型的数据。- boolean.json- color.json- float.json- intarray.json- integer.json- pattern.json- plural.json- strarray.json- string.jsonmedia表示媒体资源包括图片、音频、视频等非文本格式的文件目录下只支持文件类型。图片和音视频的类型说明间表4和表5。文件名可自定义例如icon.png。profile表示自定义配置文件其文件内容可通过包管理接口获取目录下只支持文件类型。文件名可自定义例如test_profile.json。媒体资源类型说明表4 图片资源类型说明格式文件后缀名JPEG.jpgPNG.pngGIF.gifSVG.svgWEBP.webpBMP.bmp表5 音视频资源类型说明格式支持的文件类型H.263.3gp.mp4H.264 AVCBaseline Profile (BP).3gp.mp4MPEG-4 SP.3gpVP8.webm.mkv资源文件示例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可通过资源管理的getRawFd接口引用其返回值descriptor.fd为hap包的fd。此时访问rawfile文件需要结合{fd, offset, length}一起使用。说明资源描述符不能拼接使用仅支持普通字符串如’app.type.name’。$r返回值为Resource对象可通过getStringValue 方法获取对应的字符串。资源组目录下的“资源文件示例”显示了.json文件内容包含color.json文件、string.json文件和plural.json文件访问应用资源时需先了解.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代表单数取值为1other代表复数取值为大于等于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目录下图片系统资源除了自定义资源开发者也可以使用系统中预定义的资源统一应用的视觉风格。可以查看应用UX设计中关于资源的介绍获取支持的系统资源ID及其在不同配置下的取值。在开发过程中分层参数的用法与资源限定词基本一致。对于系统资源可以通过“$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应用开发的初学者由于文档内容过多因此为了避免影响到大家的阅读体验在此只以截图展示部分内容详细完整版的看文末有免费的获取方式## 《鸿蒙零基础入门学习指南》目录一、快速入门适用于HarmonyOS应用开发的初学者。通过构建一个简单的具有页面跳转/返回功能的应用快速了解工程目录的主要文件熟悉HarmonyOS应用开发流程。开发准备基本概念工具准备构建第一个ArkTS应用Stage模型构建第一个ArkTS应用FA模型构建第一个JS应用FA模型二、开发基础知识应用程序包基础知识应用程序包概述应用程序包结构应用程序包多HAP机制应用程序包安装和卸载流程应用程序包更新流程共享包应用程序包快速修复应用配置文件Stage模型应用配置文件概述Stage模型app.json5配置文件module.json5配置文件应用配置文件概述FA模型应用配置文件概述FA模型app对象内部结构deviceConfig内部结构module对象内部结构三、资源分类与访问应用开发过程中经常需要用到颜色、字体、间距、图片等资源在不同的设备或配置中这些资源的值可能不同。资源分类与访问资源分类资源目录资源组目录创建资源目录和资源文件创建资源目录和资源文件创建资源目录创建资源文件资源访问应用资源系统资源资源匹配四、学习ArkTs语言ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript简称TS生态基础上做了进一步扩展继承了TS的所有特性是TS的超集。因此在学习ArkTS语言之前建议开发者具备TS语言开发能力。初识ArkTS语言基本语法基本语法概述声明式UI描述自定义组件状态管理其他状态管理其他状态管理概述Watch装饰器状态变量更改通知$$语法内置组件双向同步渲染控制渲染控制概述if/else条件渲染ForEach循环渲染LazyForEach数据懒加载扫描下方二维码免费领取《鸿蒙5.0零基础入门学习指南》|