首页 > 其他分享 >HarmonyOS资源使用

HarmonyOS资源使用

时间:2024-07-24 17:26:47浏览次数:16  
标签:--- 文件 限定词 HarmonyOS json 使用 目录 资源

目录

文档并不完整具体看官方文档

 资源使用说明

应用资源

资源文件介绍

base目录与限定词目录

访问应用资源

示例

 练习操作

系统资源

 资源分类与访问

 资源分类

资源目录

base目录

限定词目录

限定词目录的命名要求

资源组目录

媒体资源类型说明

资源文件示例

创建资源目录和资源文件

创建资源目录和资源文件

创建资源目录

创建资源文件



文档并不完整具体看官方文档

 资源使用说明

官方文档资源使用

在页面开发过程中,经常需要用到颜色、字体、间距、图片等资源,在不同的设备或配置中,这些资源的值可能不同。有两种方式处理:

  • 应用资源:借助资源文件能力,开发者在应用中自定义资源,自行管理这些资源在不同的设备或配置中的表现。

  • 系统资源:开发者直接使用系统预置的资源定义(即分层参数)。

应用资源

资源文件介绍

应用开发中使用的各类自定义资源文件,需要统一存放于应用的resources目录下,便于使用和维护。resources目录包括两大类目录,一类为base目录与限定词目录,另一类为rawfile目录,其基础目录结构如下所示。

resources
|---base  // 默认存在的目录
|   |---element
|   |   |---string.json
|   |---media
|   |   |---icon.png
|---en_GB-vertical-car-mdpi // 限定词目录示例,需要开发者自行创建   
|   |---element
|   |   |---string.json
|   |---media
|   |   |---icon.png
|---rawfile  // rawfile目录

base目录默认存在,而限定词目录需要开发者自行创建,其名称可以由一个或多个表征应用场景或设备特征的限定词组合而成。应用使用某资源时,系统会根据当前设备状态优先从相匹配的限定词目录中寻找该资源。只有当resources目录中没有与设备状态匹配的限定词目录,或者在限定词目录中找不到该资源时,才会去base目录中查找。rawfile是原始文件目录,它不会根据设备状态去匹配不同的资源,故不在本文的讨论范文内。

说明

  • 请访问声明式开发范式资源文件分类,了解限定词目录的命名规则、创建流程、匹配规则等,本文不展开介绍。

  • 没有设备状态匹配的限定词目录,或者在限定词目录中找不到目标资源时,会继续在base目录中查找。强烈建议对于所有应用自定义资源都在base目录中定义默认值,防止出现找不到资源值的异常场景。

  • 类Web开发范式的资源文件路径及资源限定词的使用与声明式范式不同,详情请参考类Web开发范式资源限定与访问类Web开发范式文件组织

base目录与限定词目录

base目录与限定词目录下面可以创建资源组目录(包括element、media等),用于存放特定类型的资源文件。

资源组目录目录说明资源文件
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.json

media表示媒体资源,包括图片、音频、视频等非文本格式的文件。文件名可自定义,例如:icon.png。

在element目录的各个资源文件中,以“name-value”的形式定义资源,如下所示。而在media目录中,直接以文件名作为name,故开发者将文件放入media目录即可,无需再额外定义name。

// color.json 
{
    "color": [
        {
            "name": "color_red",
            "value": "#ffff0000"
        },
        {
            "name": "color_blue",
            "value": "#ff0000ff"
        }
    ]
}

访问应用资源

 社区文章HarmonyOS应用开发-系统资源访问

在工程中,通过 "$r('app.type.name')" 的形式引用应用资源。app代表是应用内resources目录中定义的资源;type 代表资源类型(或资源的存放位置),可以取 color、float、string、plural和media,name代表资源命名,由开发者添加资源时确定。

说明

可以查看声明式范式访问应用资源,了解资源访问的更多细节。

示例

在应用的resources目录下,创建名为tablet的限定词子目录,并按照下表所示,在base目录和tablet限定词目录中添加相应的资源。

资源名称资源类型base目录中资源值限定词目录(tablet)中资源值
my_stringstringdefaulttablet
my_colorcolor#ff0000#0000ff
my_floatfloat60vp80vp
my_imagemediamy_image.png(太阳图标)my_image.png(月亮图标)

在代码中通过 "$r('app.type.name')" 的形式使用应用资源,并分别在默认设备和平板上查看代码的运行效果,可以发现同一资源在不同设备上的取值不同。

@Entry
@Component
struct Index {
  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Text($r("app.string.my_string"))
        .fontSize($r("app.float.my_float"))
        .fontColor($r("app.color.my_color"))
      Image($r("app.media.my_image"))
        .width(100)
        .height(100)
    }
    .width('100%')
    .height('100%')
  }
}

 练习操作

新建平板tablet资源目录

 Tablet代表平板, 限定词对应的是官网这个资源目录->表2 限定词取值要求

 

 成功了会在base同级目录生成tablet目录

 

 新建资源文件string

 添加资源值,平板模式下会取tablet内的值

 

 只有当resources目录中没有与设备状态匹配的限定词目录,或者在限定词目录中找不到该资源时,才会去base目录中查找。

结果 

 

系统资源

官网系统资源

除了自定义资源,开发者也可以使用系统中预定义的资源(即分层参数,同一资源ID在设备类型、深浅色等不同配置下有不同的取值)。

在开发过程中,分层参数的用法与资源限定词基本一致。开发者可以通过"$r('sys.type.resource_id')"的形式引用系统资源。sys代表是系统资源;type代表资源类型,值可以取color、float、string和media;resource_id代表资源id。

 说明

  • 仅声明式开发范式支持使用分层参数,类Web开发范式不支持。

  • 系统资源可以保证不同团队开发出的应用有较为一致的视觉风格。对于系统预置应用,强烈建议使用系统资源;对于三方应用,可以根据需要选择使用系统资源或自定义应用资源。

 资源分类与访问

 官网资源分类与访问

应用开发过程中,经常需要用到颜色、字体、间距、图片等资源,在不同的设备或配置中,这些资源的值可能不同。

  • 应用资源:借助资源文件能力,开发者在应用中自定义资源,自行管理这些资源在不同的设备或配置中的表现。

  • 系统资源:开发者直接使用系统预置的资源定义。资源分类

 资源分类

官网资源分类

 说明

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文件中。文件名可自定义。
|---resfile // 其他类型文件,原始文件形式保存,不会被集成到resources.index文件中。文件名可自定义。

资源目录

base目录

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

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

限定词目录

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

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

限定词目录的命名要求

限定词目录可以由一个或多个表征应用场景或设备特征的限定词组合而成,包括移动国家码和移动网络码、语言、文字、国家或地区、横竖屏、设备类型、颜色模式和屏幕密度等维度,限定词之间通过下划线(_)或者中划线(-)连接。开发者在创建限定词目录时,需要遵守限定词目录的命名规则。

  • 限定词的组合顺序:_移动国家码_移动网络码-语言_文字_国家或地区-横竖屏-设备类型-颜色模式-屏幕密度_。开发者可以根据应用的使用场景和设备特征,选择其中的一类或几类限定词组成目录名称。

  • 限定词的连接方式:语言、文字、国家或地区之间采用下划线(_)连接,移动国家码和移动网络码之间也采用下划线(_)连接,除此之外的其他限定词之间均采用中划线(-)连接。例如:zh_Hant_CNzh_CN-car-ldpi

  • 限定词的取值范围:每类限定词的取值必须符合限定词取值要求表中的条件,如表2。否则,将无法匹配目录中的资源文件。

表2 限定词取值要求(部分,具体看官网资源目录

限定词类型含义与取值说明
语言

表示设备使用的语言类型,由2~3个小写字母组成。例如:zh表示中文,en表示英语,mai表示迈蒂利语。

详细取值范围,请查阅ISO 639(ISO制定的语言编码标准)。

文字

表示设备使用的文字类型,由1个大写字母(首字母)和3个小写字母组成。例如:Hans表示简体中文,Hant表示繁体中文。

详细取值范围,请查阅ISO 15924(ISO制定的文字编码标准)。

横竖屏

表示设备的屏幕方向,取值如下:

- vertical:竖屏

- horizontal:横屏

设备类型

表示设备的类型,取值如下:

- car:车机

- tablet:平板

- tv:智慧屏

- wearable:智能穿戴

颜色模式

表示设备的颜色模式,取值如下:

- dark:深色模式

- light:浅色模式

屏幕密度

- ldpi:表示大规模的屏幕密度(Large-scale Dots Per Inch),适用于dpi取值为(160, 240]的设备。

(还有其他 ,具体看官网资源目录

资源组目录

 官方文档

资源组目录包括element、media、profile三种类型的资源文件,用于存放特定类型资源。

 表3 资源组目录说明

目录类型说明资源文件
element

表示元素资源,以下每一类数据都采用相应的JSON文件来表征(目录下仅支持文件类型)。

- boolean,布尔型

- color,颜色

- float,浮点型,范围是-2^128-2^128

- intarray,整型数组

- integer,整型,范围是-2^31-2^31-1

- plural,复数形式

- strarray,字符串数组

- string,字符串,格式化字符串请参考API文档

element目录中的文件名称建议与下面的文件名保持一致。每个文件中只能包含同一类型的数据。

- boolean.json

- color.json

- float.json

- intarray.json

- integer.json

- plural.json

- strarray.json

- string.json

media

表示媒体资源,包括图片、音频、视频等非文本格式的文件(目录下只支持文件类型)。

图片和音视频的类型说明见表4和表5。

文件名可自定义,例如:icon.png。
profile表示自定义配置文件,其文件内容可通过包管理接口获取(目录下只支持json文件类型)。文件名可自定义,例如:test_profile.json。

媒体资源类型说明

表4 图片资源类型说明

格式文件后缀名
JPEG.jpg
PNG.png
GIF.gif
SVG.svg
WEBP.webp
BMP.bmp

 表5 音视频资源类型说明

格式支持的文件类型
H.264 AVC.3gp
Baseline Profile (BP).mp4

资源文件示例

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 %1$s."
        },
        {
            "name":"message_notification",
            "value":"Hello, %1$s!,You have %2$d new messages."
        }
    ]
}

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为供选择的限定词目录,通过右边的小箭头可添加或者删除。

限定词对应的是官网这个资源目录->表2 限定词取值要求

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

创建资源目录

在resources目录右键菜单选择“New > Resource Directory”,可创建资源目录,默认创建的是base目录。如果选择了限定词,则会按照命名规范自动生成限定词和资源组目录。确定限定词后,选择资源组类型,当前资源组类型支持Element、Media、Profile三种,创建后生成资源目录。

创建资源文件

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

标签:---,文件,限定词,HarmonyOS,json,使用,目录,资源
From: https://blog.csdn.net/shiyibushiwei/article/details/140657937

相关文章

  • shiro中session的使用
    下图是shiro中session的存放使用逻辑使用shiro中的session的步骤一、创建SessionFactory的实现类,实现createSession方法@OverridepublicSessioncreateSession(SessionContextinitData){OnlineSessionsession=newOnlineSession();if(initData!=null&&initDatai......
  • php使用ZipArchive解压压缩包
    //处理照片压缩包$zip=new\ZipArchive();//获取压缩包内容照片数量$path='static/oa/img/staImport/'.date('Ymd').'/'.date('His');if($zip->open($param['fileUrl'])===TRU......
  • 在WPS的表格 里使用VBA,批量进行替换内容
    需求:在今日的工作过程中,发现有大量的内容需要从另外一个表格前两列里匹配进行替换。从编号替换成具体内容,但是有一些地方编号有多个用逗号连接在一起,需要先分隔开来。解决方案:找了很多方案,但是没有现成的公式能满足这个需求,简单的脚本无法满足,于是找了宏脚本,先录制一个简单的替换......
  • 泰凌微8258学习日记-6:LCD屏幕的点亮以及使用
            点亮LCD对我而言算是比较难的操作了,在了解到LCD点亮的步骤以后(开SPI,导入LCD驱动,主函数调用),我开始学习LCD的引脚功能,SPI如何使用,后面拿到中景园给的LCD例程(STM32的),修改LCD驱动(这一步是最难的)。好在有位大哥帮我,也是顺利完成了驱动的修改。......
  • 如何使用 instaloader 下载特定数量的照片(而不是整个帖子)
    我正在使用名为instaloader的Instagramapi。我正在尝试从数组中的每个配置文件下载25张图片。我尝试使用get_postsforpostinprofile.get_posts():#downloadpostsL.download_post(post,target=data_path/p_name)但这会下载图片以及所有评论和元......
  • 如何使用 Google Drive API 识别和删除大型 Google Takeout ZIP 文件?
    如何使用GoogleDriveAPI识别和删除大型GoogleTakeoutZIP文件?正文:我遇到一个问题:GoogleTakeout不断在我的Google云端硬盘中创建大型ZIP文件,导致其达到存储限制。我需要使用GoogleDriveAPI以编程方式识别和删除这些文件。我注意到文件名遵循类似takeou......
  • Ubuntu中如何使用Update-rc.d命令(转)
    在Ubuntu中,update-rc.d命令用于管理系统的服务(init脚本)的启动和停止顺序。它允许你将服务添加到特定的运行级别,并设置服务在系统启动时是否自动启动。以下是一些常用的update-rc.d命令示例及其说明:添加服务到特定运行级别:sudo update-rc.d  defaults将指定的服务添加到默认......
  • 如何使用 mypy 的类型检查来强制可调用类型的签名
    我有一个函数,它接受另一个函数x作为其参数。函数x可以有2种不同类型的签名,我想通过类型提示来强制执行此操作:TYPE_A=Callable[[int,int],int]TYPE_B=Callable[[int],int]defmy_func(x:Union[TYPE_A,TYPE_B])->None:...determinexisofwhichtype......
  • 每日一面—— 不使用任何中间变量如何将a、b的值进行交换
    请参考以下C++程序代码。1#include<stdio.h>23voidswap1(int&a,int&b)4{5inttemp=a;//使用局部变量temp完成交换6a=b;7b=temp;8};910voidswap2(int&a,int&b)11{12a=a+b;//使用加减运算完成交换13b=a-b;14......
  • Windows使用NVM管理node.js
    NVM(NodeVersionManager)是一个开源的命令行工具,用于管理多个版本的Node.js在同一台计算机上。NVM允许开发者轻松地安装、切换和管理不同版本的Node.js,这对于在多个项目上工作或测试Node.js的不同特性时非常有用。在macOS或Linux上,通常通过curl或wget下载安......