資源分類(lèi)與訪問(wèn)
應(yīng)用開(kāi)發(fā)過(guò)程中,經(jīng)常需要用到顏色、字體、間距、圖片等資源,在不同的設(shè)備或配置中,這些資源的值可能不同。
- 應(yīng)用資源:借助資源文件能力,開(kāi)發(fā)者在應(yīng)用中自定義資源,自行管理這些資源在不同的設(shè)備或配置中的表現(xiàn)。
- 系統(tǒng)資源:開(kāi)發(fā)者直接使用系統(tǒng)預(yù)置的資源定義(即[分層參數(shù)],同一資源ID在設(shè)備橫豎屏、顏色模式等不同配置下有不同的取值)。
資源分類(lèi)
應(yīng)用開(kāi)發(fā)中使用的各類(lèi)資源文件,需要放入特定子目錄中存儲(chǔ)管理。resources目錄包括三大類(lèi)目錄,一類(lèi)為base目錄,一類(lèi)為限定詞目錄,還有一類(lèi)為rawfile目錄。
base目錄默認(rèn)存在,而限定詞目錄需要開(kāi)發(fā)者自行創(chuàng)建。應(yīng)用使用某資源時(shí),系統(tǒng)會(huì)根據(jù)當(dāng)前設(shè)備狀態(tài)優(yōu)先從相匹配的限定詞目錄中尋找該資源。只有當(dāng)resources目錄中沒(méi)有與設(shè)備狀態(tài)匹配的限定詞目錄,或者在限定詞目錄中找不到該資源時(shí),才會(huì)去base目錄中查找。rawfile是原始文件目錄,不會(huì)根據(jù)設(shè)備狀態(tài)去匹配不同的資源。
資源目錄示例:
resources
|---base
| |---element
| | |---string.json
| |---media
| | |---icon.png
| |---profile
| | |---test_profile.json
|---en_US // 默認(rèn)存在的目錄,設(shè)備語(yǔ)言環(huán)境是美式英文時(shí),優(yōu)先匹配此目錄下資源
| |---element
| | |---string.json
| |---media
| | |---icon.png
| |---profile
| | |---test_profile.json
|---zh_CN // 默認(rèn)存在的目錄,設(shè)備語(yǔ)言環(huán)境是簡(jiǎn)體中文時(shí),優(yōu)先匹配此目錄下資源
| |---element
| | |---string.json
| |---media
| | |---icon.png
| |---profile
| | |---test_profile.json
|---en_GB-vertical-car-mdpi // 自定義多限定詞目錄示例,由開(kāi)發(fā)者創(chuàng)建
| |---element
| | |---string.json
| |---media
| | |---icon.png
| |---profile
| | |---test_profile.json
|---rawfile // 其他類(lèi)型文件,原始文件形式保存,不會(huì)被集成到resources.index文件中。文件名可自定義。
`HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿`
表1 resources目錄分類(lèi)
分類(lèi) | base目錄 | 限定詞目錄 | rawfile目錄 |
---|---|---|---|
組織形式 | base目錄是默認(rèn)存在的目錄。當(dāng)應(yīng)用的resources目錄中沒(méi)有與設(shè)備狀態(tài)匹配的限定詞目錄時(shí),會(huì)自動(dòng)引用該目錄中的資源文件。 base目錄的二級(jí)子目錄為 資源組目錄 ,用于存放字符串、顏色、布爾值等基礎(chǔ)元素,以及媒體、動(dòng)畫(huà)、布局等資源文件,具體要求參見(jiàn)[資源組目錄](méi)。 | en_US和zh_CN是默認(rèn)存在的兩個(gè)限定詞目錄,其余限定詞目錄需要開(kāi)發(fā)者自行創(chuàng)建。目錄名稱(chēng)由一個(gè)或多個(gè)表征應(yīng)用場(chǎng)景或設(shè)備特征的限定詞組合而成,具體要求參見(jiàn)[限定詞目錄](méi)。 限定詞目錄的二級(jí)子目錄為 資源組目錄 ,用于存放字符串、顏色、布爾值等基礎(chǔ)元素,以及媒體、動(dòng)畫(huà)、布局等資源文件,具體要求參見(jiàn)[資源組目錄](méi)。 | 支持創(chuàng)建多層子目錄,目錄名稱(chēng)可以自定義,文件夾內(nèi)可以自由放置各類(lèi)資源文件。 rawfile目錄的文件不會(huì)根據(jù)設(shè)備狀態(tài)去匹配不同的資源。 |
編譯方式 | 目錄中的資源文件會(huì)被編譯成二進(jìn)制文件,并賦予資源文件ID。 | 目錄中的資源文件會(huì)被編譯成二進(jìn)制文件,并賦予資源文件ID。 | 目錄中的資源文件會(huì)被直接打包進(jìn)應(yīng)用,不經(jīng)過(guò)編譯,也不會(huì)被賦予資源文件ID。 |
引用方式 | 通過(guò)指定資源類(lèi)型(type)和資源名稱(chēng)(name)來(lái)引用。 | 通過(guò)指定資源類(lèi)型(type)和資源名稱(chēng)(name)來(lái)引用。 | 通過(guò)指定文件路徑和文件名來(lái)引用。 |
限定詞目錄
限定詞目錄可以由一個(gè)或多個(gè)表征應(yīng)用場(chǎng)景或設(shè)備特征的限定詞組合而成,包括移動(dòng)國(guó)家碼和移動(dòng)網(wǎng)絡(luò)碼、語(yǔ)言、文字、國(guó)家或地區(qū)、橫豎屏、顏色模式和屏幕密度等維度,限定詞之間通過(guò)下劃線(_)或者中劃線(-)連接。開(kāi)發(fā)者在創(chuàng)建限定詞目錄時(shí),需要掌握限定詞目錄的命名要求,以及限定詞目錄與設(shè)備狀態(tài)的匹配規(guī)則。
限定詞目錄的命名要求
- 限定詞的組合順序: 移動(dòng)國(guó)家碼_移動(dòng)網(wǎng)絡(luò)碼-語(yǔ)言_文字_國(guó)家或地區(qū)-橫豎屏-顏色模式-屏幕密度 。開(kāi)發(fā)者可以根據(jù)應(yīng)用的使用場(chǎng)景和設(shè)備特征,選擇其中的一類(lèi)或幾類(lèi)限定詞組成目錄名稱(chēng)。
- 限定詞的連接方式:語(yǔ)言、文字、國(guó)家或地區(qū)之間采用下劃線( )連接,移動(dòng)國(guó)家碼和移動(dòng)網(wǎng)絡(luò)碼之間也采用下劃線( )連接,除此之外的其他限定詞之間均采用中劃線(-)連接。例如: zh_Hant_CN 、 zh_CN-car-ldpi 。
- 限定詞的取值范圍:每類(lèi)限定詞的取值必須符合限定詞取值要求表中的條件,否則,將無(wú)法匹配目錄中的資源文件。
表2 限定詞取值要求
限定詞類(lèi)型 | 含義與取值說(shuō)明 |
---|---|
移動(dòng)國(guó)家碼和移動(dòng)網(wǎng)絡(luò)碼 | 移動(dòng)國(guó)家碼(MCC)和移動(dòng)網(wǎng)絡(luò)碼(MNC)的值取自設(shè)備注冊(cè)的網(wǎng)絡(luò)。MCC后面可以跟隨MNC,使用下劃線(_)連接,也可以單獨(dú)使用。例如:mcc460表示中國(guó),mcc460_mnc00表示中國(guó)_中國(guó)移動(dòng)。 詳細(xì)取值范圍,請(qǐng)查閱 ITU-T E.212 (國(guó)際電聯(lián)相關(guān)標(biāo)準(zhǔn))。 |
語(yǔ)言 | 表示設(shè)備使用的語(yǔ)言類(lèi)型,由2~3個(gè)小寫(xiě)字母組成。例如:zh表示中文,en表示英語(yǔ),mai表示邁蒂利語(yǔ)。 詳細(xì)取值范圍,請(qǐng)查閱 ISO 639 (ISO制定的語(yǔ)言編碼標(biāo)準(zhǔn))。 |
文字 | 表示設(shè)備使用的文字類(lèi)型,由1個(gè)大寫(xiě)字母(首字母)和3個(gè)小寫(xiě)字母組成。例如:Hans表示簡(jiǎn)體中文,Hant表示繁體中文。 詳細(xì)取值范圍,請(qǐng)查閱 ISO 15924 (ISO制定的文字編碼標(biāo)準(zhǔn))。 |
國(guó)家或地區(qū) | 表示用戶(hù)所在的國(guó)家或地區(qū),由2~3個(gè)大寫(xiě)字母或者3個(gè)數(shù)字組成。例如:CN表示中國(guó),GB表示英國(guó)。 詳細(xì)取值范圍,請(qǐng)查閱 ISO 3166-1 (ISO制定的國(guó)家和地區(qū)編碼標(biāo)準(zhǔn))。 |
橫豎屏 | 表示設(shè)備的屏幕方向,取值如下: - vertical:豎屏 - horizontal:橫屏 |
顏色模式 | 表示設(shè)備的顏色模式,取值如下: - dark:深色模式 - light:淺色模式 |
屏幕密度 | 表示設(shè)備的屏幕密度(單位為dpi),取值如下: - sdpi:表示小規(guī)模的屏幕密度(Small-scale Dots Per Inch),適用于dpi取值為(0, 120]的設(shè)備。 - mdpi:表示中規(guī)模的屏幕密度(Medium-scale Dots Per Inch),適用于dpi取值為(120, 160]的設(shè)備。 - ldpi:表示大規(guī)模的屏幕密度(Large-scale Dots Per Inch),適用于dpi取值為(160, 240]的設(shè)備。 - xldpi:表示特大規(guī)模的屏幕密度(Extra Large-scale Dots Per Inch),適用于dpi取值為(240, 320]的設(shè)備。 - xxldpi:表示超大規(guī)模的屏幕密度(Extra Extra Large-scale Dots Per Inch),適用于dpi取值為(320, 480]的設(shè)備。 - xxxldpi:表示超特大規(guī)模的屏幕密度(Extra Extra Extra Large-scale Dots Per Inch),適用于dpi取值為(480, 640]的設(shè)備。 |
限定詞目錄與設(shè)備狀態(tài)的匹配規(guī)則
- 在為設(shè)備匹配對(duì)應(yīng)的資源文件時(shí),限定詞目錄匹配的優(yōu)先級(jí)從高到低依次為:移動(dòng)國(guó)家碼和移動(dòng)網(wǎng)絡(luò)碼 > 區(qū)域(可選組合:語(yǔ)言、語(yǔ)言_文字、語(yǔ)言_國(guó)家或地區(qū)、語(yǔ)言_文字_國(guó)家或地區(qū))> 橫豎屏 > 顏色模式 > 屏幕密度。
- 如果限定詞目錄中包含移動(dòng)國(guó)家碼和移動(dòng)網(wǎng)絡(luò)碼、語(yǔ)言、文字、橫豎屏、顏色模式限定詞,則對(duì)應(yīng)限定詞的取值必須與當(dāng)前的設(shè)備狀態(tài)完全一致,該目錄才能夠參與設(shè)備的資源匹配。例如,限定詞目錄“zh_CN-car-ldpi”不能參與“en_US”設(shè)備的資源匹配。
資源組目錄
base目錄與限定詞目錄下面可以創(chuàng)建資源組目錄(包括element、media、profile),用于存放特定類(lèi)型的資源文件,詳見(jiàn)資源組目錄說(shuō)明。
表3 資源組目錄說(shuō)明
資源組目錄 | 目錄說(shuō)明 | 資源文件 |
---|---|---|
element | 表示元素資源,以下每一類(lèi)數(shù)據(jù)都采用相應(yīng)的JSON文件來(lái)表征(目錄下只支持json文件類(lèi)型)。 - boolean,布爾型 - color,顏色 - float,浮點(diǎn)型 - intarray,整型數(shù)組 - integer,整型 - pattern,樣式 - plural,復(fù)數(shù)形式 - strarray,字符串?dāng)?shù)組 - string,字符串 | element目錄中的文件名稱(chēng)建議與下面的文件名保持一致。每個(gè)文件中只能包含同一類(lèi)型的數(shù)據(jù)。 - boolean.json - color.json - float.json - intarray.json - integer.json - pattern.json - plural.json - strarray.json - string.json |
media | 表示媒體資源,包括圖片、音頻、視頻等非文本格式的文件(支持的文件類(lèi)型見(jiàn) 媒體資源類(lèi)型說(shuō)明 )。 | 文件名可自定義,例如:icon.png。 |
profile | 表示自定義配置文件(目錄下只支持json文件類(lèi)型)。 | 文件名可自定義,例如:test_profile.json。 |
媒體資源類(lèi)型說(shuō)明
表4 圖片資源類(lèi)型說(shuō)明
格式 | 文件后綴名 |
---|---|
JPEG | .jpg |
PNG | .png |
GIF | .gif |
SVG | .svg |
WEBP | .webp |
BMP | .bmp |
表5 音視頻資源類(lèi)型說(shuō)明
格式 | 支持的文件類(lèi)型 |
---|---|
H.263 | .3gp .mp4 |
H.264 AVC Baseline Profile (BP) | .3gp .mp4 |
MPEG-4 SP | .3gp |
VP8 | .webm .mkv |
資源文件示例
color.json文件的內(nèi)容如下:
{
"color": [
{
"name": "color_hello",
"value": "#ffff0000"
},
{
"name": "color_world",
"value": "#ff0000ff"
}
]
}
float.json文件的內(nèi)容如下:
{
"float":[
{
"name":"font_hello",
"value":"28.0fp"
},
{
"name":"font_world",
"value":"20.0fp"
}
]
}
string.json文件的內(nèi)容如下:
{
"string":[
{
"name":"string_hello",
"value":"Hello"
},
{
"name":"string_world",
"value":"World"
},
{
"name":"message_arrive",
"value":"We will arrive at %s."
}
]
}
plural.json文件的內(nèi)容如下:
{
"plural":[
{
"name":"eat_apple",
"value":[
{
"quantity":"one",
"value":"%d apple"
},
{
"quantity":"other",
"value":"%d apples"
}
]
}
]
}
資源訪問(wèn)
應(yīng)用資源
創(chuàng)建資源文件
在resources目錄下,可按照限定詞目錄和資源組目錄的說(shuō)明創(chuàng)建子目錄和目錄內(nèi)的文件。
同時(shí),DevEco Studio也提供了創(chuàng)建資源目錄和資源文件的界面。
- 創(chuàng)建資源目錄及資源文件
在resources目錄右鍵菜單選擇“New > Resource File”,此時(shí)可同時(shí)創(chuàng)建目錄和文件。文件默認(rèn)創(chuàng)建在base目錄的對(duì)應(yīng)資源組下。如果選擇了限定詞,則會(huì)按照命名規(guī)范自動(dòng)生成限定詞+資源組目錄,并將文件創(chuàng)建在目錄中。圖中Avaliable qualifiers為供選擇的限定詞目錄,通過(guò)右邊的小箭頭可添加或者刪除。File name為需要?jiǎng)?chuàng)建的文件名,Resource type為資源組類(lèi)型,默認(rèn)是element。Root Element為資源類(lèi)型。創(chuàng)建的目錄名自動(dòng)生成,格式固定為“限定詞.資源組”,例如:創(chuàng)建一個(gè)限定詞為dark的element目錄,自動(dòng)生成的目錄名稱(chēng)為“dark.element”。 - 創(chuàng)建資源目錄
在resources目錄右鍵菜單選擇“New > Resource Directory”,此時(shí)可創(chuàng)建資源目錄。資源目錄創(chuàng)建的是base目錄,也可根據(jù)需求創(chuàng)建其它限定詞目錄。確定限定詞后,選擇資源組類(lèi)型,當(dāng)前資源組類(lèi)型支持Element、Media、Profile三種,創(chuàng)建后自動(dòng)生成目錄名稱(chēng)。 - 創(chuàng)建資源文件
在資源目錄的右鍵菜單選擇“New > XXX Resource File”,即可創(chuàng)建對(duì)應(yīng)資源組目錄的資源文件。例如,在element目錄下可新建Element Resource File。
訪問(wèn)應(yīng)用資源
在工程中,通過(guò)"$r('app.type.name')"
的形式引用應(yīng)用資源。app代表是應(yīng)用內(nèi)resources目錄中定義的資源;type代表資源類(lèi)型(或資源的存放位置),可以取“color”、“float”、“string”、“plural”、“media”,name代表資源命名,由開(kāi)發(fā)者定義資源時(shí)確定。
引用rawfile下資源時(shí)使用"$rawfile('filename')"
的形式,filename需要表示為rawfile目錄下的文件相對(duì)路徑,文件名需要包含后綴,路徑開(kāi)頭不可以以"/"開(kāi)頭。
說(shuō)明:
資源描述符不能拼接使用,僅支持普通字符串如
'app.type.name'
。
在xxx.ets文件中,可以使用在resources目錄中定義的資源。資源分類(lèi)中[資源組目錄](méi)下的“資源文件示例”顯示了.json文件內(nèi)容,包含color.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的第一個(gè)參數(shù)指定string資源,第二個(gè)參數(shù)用于替換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的第一個(gè)指定plural資源,第二個(gè)參數(shù)用于指定單復(fù)數(shù)(在中文,單復(fù)數(shù)均使用other。在英文,one:代表單數(shù),取值為1;other:代表復(fù)數(shù),取值為大于1的整數(shù)),第三個(gè)參數(shù)用于替換%d
// 如下示例代碼為復(fù)數(shù),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目錄下圖片
系統(tǒng)資源
系統(tǒng)資源包含色彩、圓角、字體、間距、字符串及圖片等。通過(guò)使用系統(tǒng)資源,不同的開(kāi)發(fā)者可以開(kāi)發(fā)出具有相同視覺(jué)風(fēng)格的應(yīng)用。
開(kāi)發(fā)者可以通過(guò)“$r('sys.type.resource_id')”
的形式引用系統(tǒng)資源。sys代表是系統(tǒng)資源;type代表資源類(lèi)型,可以取“color”、“float”、“string”、“media”;resource_id代表資源id。
可以查看應(yīng)用UX設(shè)計(jì)中關(guān)于資源的介紹,獲取OpenHarmony支持的系統(tǒng)資源ID及其在不同配置下的取值。
說(shuō)明:
開(kāi)發(fā)前請(qǐng)熟悉鴻蒙開(kāi)發(fā)指導(dǎo)文檔:[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md
]
- 僅聲明式開(kāi)發(fā)范式支持使用系統(tǒng)資源,類(lèi)Web開(kāi)發(fā)范式不支持。
- 可以查看OpenHarmony/resources代碼倉(cāng)了解系統(tǒng)預(yù)置資源的實(shí)現(xiàn),這里的目錄結(jié)構(gòu)與工程中的resources目錄類(lèi)似,也是通過(guò)資源限定詞匹配不同的設(shè)備或設(shè)備狀態(tài)。
- 系統(tǒng)資源的使用場(chǎng)景、id、參數(shù)詳細(xì)對(duì)照表詳見(jiàn)[OpenHarmony_系統(tǒng)資源分層設(shè)計(jì)表_V1.0.xlsm]
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)
審核編輯 黃宇
-
JSON
+關(guān)注
關(guān)注
0文章
117瀏覽量
6968 -
鴻蒙
+關(guān)注
關(guān)注
57文章
2352瀏覽量
42859 -
OpenHarmony
+關(guān)注
關(guān)注
25文章
3722瀏覽量
16320
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論