ArkUI-X資源分類與訪問

應用開發過程中,經常需要用到顏色、字體、間距、圖片等資源,在不同的設備或配置中,這些資源的值可能不同。

  • 應用資源:借助資源文件能力,開發者在應用中自定義資源,自行管理這些資源在不同的設備或配置中的表現。
  • 系統資源:開發者直接使用系統預置的資源定義(即分層參數,同一資源ID在設備橫豎屏、顏色模式等不同配置下有不同的取值)。

資源分類

應用開發中使用的各類資源文件,需要放入特定子目錄中存儲管理。resources目錄包括三大類目錄,一類為base目錄,一類為限定詞目錄,還有一類為rawfile目錄。

base目錄默認存在,而限定詞目錄需要開發者自行創建。應用使用某資源時,系統會根據當前設備狀態優先從相匹配的限定詞目錄中尋找該資源。只有當resources目錄中沒有與設備狀態匹配的限定詞目錄,或者在限定詞目錄中找不到該資源時,才會去base目錄中查找。rawfile是原始文件目錄,不會根據設備狀態去匹配不同的資源。

資源目錄示例:

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

表1 resources目錄分類

分類base目錄限定詞目錄rawfile目錄
組織形式base目錄是默認存在的目錄。當應用的resources目錄中沒有與設備狀態匹配的限定詞目錄時,會自動引用該目錄中的資源文件。
base目錄的二級子目錄為資源組目錄,用于存放字符串、顏色、布爾值等基礎元素,以及媒體、動畫、布局等資源文件,具體要求參見資源組目錄。
en_US和zh_CN是默認存在的兩個限定詞目錄,其余限定詞目錄需要開發者自行創建。目錄名稱由一個或多個表征應用場景或設備特征的限定詞組合而成,具體要求參見限定詞目錄。
限定詞目錄的二級子目錄為資源組目錄,用于存放字符串、顏色、布爾值等基礎元素,以及媒體、動畫、布局等資源文件,具體要求參見資源組目錄。
支持創建多層子目錄,目錄名稱可以自定義,文件夾內可以自由放置各類資源文件。
rawfile目錄的文件不會根據設備狀態去匹配不同的資源。
編譯方式目錄中的資源文件會被編譯成二進制文件,并賦予資源文件ID。目錄中的資源文件會被編譯成二進制文件,并賦予資源文件ID。目錄中的資源文件會被直接打包進應用,不經過編譯,也不會被賦予資源文件ID。
引用方式通過指定資源類型(type)和資源名稱(name)來引用。通過指定資源類型(type)和資源名稱(name)來引用。通過指定文件路徑和文件名來引用。

限定詞目錄

限定詞目錄可以由一個或多個表征應用場景或設備特征的限定詞組合而成,包括移動國家碼和移動網絡碼、語言、文字、國家或地區、橫豎屏、顏色模式和屏幕密度等維度,限定詞之間通過下劃線(_)或者中劃線(-)連接。開發者在創建限定詞目錄時,需要掌握限定詞目錄的命名要求,以及限定詞目錄與設備狀態的匹配規則。

限定詞目錄的命名要求

  • 限定詞的組合順序:_移動國家碼_移動網絡碼-語言_文字_國家或地區-橫豎屏-顏色模式-屏幕密度_。開發者可以根據應用的使用場景和設備特征,選擇其中的一類或幾類限定詞組成目錄名稱。

  • 限定詞的連接方式:語言、文字、國家或地區之間采用下劃線(_)連接,移動國家碼和移動網絡碼之間也采用下劃線(_)連接,除此之外的其他限定詞之間均采用中劃線(-)連接。例如:zh_Hant_CNzh_CN-car-ldpi

  • 限定詞的取值范圍:每類限定詞的取值必須符合限定詞取值要求表中的條件,否則,將無法匹配目錄中的資源文件。

表2 限定詞取值要求

限定詞類型含義與取值說明
移動國家碼和移動網絡碼移動國家碼(MCC)和移動網絡碼(MNC)的值取自設備注冊的網絡。MCC后面可以跟隨MNC,使用下劃線(_)連接,也可以單獨使用。例如:mcc460表示中國,mcc460_mnc00表示中國_中國移動。
詳細取值范圍,請查閱ITU-T?E.212(國際電聯相關標準)。
語言表示設備使用的語言類型,由2~3個小寫字母組成。例如:zh表示中文,en表示英語,mai表示邁蒂利語。
詳細取值范圍,請查閱ISO?639(ISO制定的語言編碼標準)。
文字表示設備使用的文字類型,由1個大寫字母(首字母)和3個小寫字母組成。例如:Hans表示簡體中文,Hant表示繁體中文。
詳細取值范圍,請查閱ISO?15924(ISO制定的文字編碼標準)。
國家或地區表示用戶所在的國家或地區,由2~3個大寫字母或者3個數字組成。例如:CN表示中國,GB表示英國。
詳細取值范圍,請查閱ISO?3166-1(ISO制定的國家和地區編碼標準)。
橫豎屏表示設備的屏幕方向,取值如下:
-?vertical:豎屏
-?horizontal:橫屏
顏色模式表示設備的顏色模式,取值如下:
-?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]的設備。

限定詞目錄與設備狀態的匹配規則

  • 在為設備匹配對應的資源文件時,限定詞目錄匹配的優先級從高到低依次為:移動國家碼和移動網絡碼 > 區域(可選組合:語言、語言_文字、語言_國家或地區、語言_文字_國家或地區)> 橫豎屏 > 顏色模式 > 屏幕密度。

  • 如果限定詞目錄中包含移動國家碼和移動網絡碼、語言、文字、橫豎屏、顏色模式限定詞,則對應限定詞的取值必須與當前的設備狀態完全一致,該目錄才能夠參與設備的資源匹配。例如,限定詞目錄“zh_CN-car-ldpi”不能參與“en_US”設備的資源匹配。

資源組目錄

base目錄與限定詞目錄下面可以創建資源組目錄(包括element、media、profile),用于存放特定類型的資源文件,詳見資源組目錄說明。

表3 資源組目錄說明

資源組目錄目錄說明資源文件
element表示元素資源,以下每一類數據都采用相應的JSON文件來表征(目錄下只支持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。
profile表示自定義配置文件(目錄下只支持json文件類型)。文件名可自定義,例如:test_profile.json。

媒體資源類型說明

表4 圖片資源類型說明

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

表5 音視頻資源類型說明

格式支持的文件類型
H.263.3gp
.mp4
H.264 AVC
Baseline Profile (BP)
.3gp
.mp4
MPEG-4 SP.3gp
VP8.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目錄的對應資源組下。如果選擇了限定詞,則會按照命名規范自動生成限定詞+資源組目錄,并將文件創建在目錄中。圖中Avaliable qualifiers為供選擇的限定詞目錄,通過右邊的小箭頭可添加或者刪除。File name為需要創建的文件名,Resource type為資源組類型,默認是element。Root Element為資源類型。創建的目錄名自動生成,格式固定為“限定詞.資源組”,例如:創建一個限定詞為dark的element目錄,自動生成的目錄名稱為“dark.element”。

    外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

  • 創建資源目錄

    在resources目錄右鍵菜單選擇“New > Resource Directory”,此時可創建資源目錄。資源目錄創建的是base目錄,也可根據需求創建其它限定詞目錄。確定限定詞后,選擇資源組類型,當前資源組類型支持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目錄下的文件相對路徑,文件名需要包含后綴,路徑開頭不可以以"/"開頭。

說明:

資源描述符不能拼接使用,僅支持普通字符串如'app.type.name'

在xxx.ets文件中,可以使用在resources目錄中定義的資源。資源分類中資源組目錄下的“資源文件示例”顯示了.json文件內容,包含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的第一個參數指定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。

可以查看應用UX設計中關于資源的介紹,獲取OpenHarmony支持的系統資源ID及其在不同配置下的取值。

說明:

  • 僅聲明式開發范式支持使用系統資源,類Web開發范式不支持。

  • 可以查看OpenHarmony/resources代碼倉了解系統預置資源的實現,這里的目錄結構與工程中的resources目錄類似,也是通過資源限定詞匹配不同的設備或設備狀態。

  • 系統資源的使用場景、id、參數詳細對照表詳見OpenHarmony_系統資源分層設計表_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)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/86156.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/86156.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/86156.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

11-StarRocks故障診斷FAQ

StarRocks故障診斷FAQ 概述 本文檔整理了StarRocks故障診斷過程中常見的問題和解決方案,涵蓋了故障排查、日志分析、性能診斷、問題定位等各個方面,幫助用戶快速定位和解決StarRocks相關問題。 故障排查FAQ Q1: 如何排查連接故障? A: 連接故障排查方法: 1. 網絡連通性…

敏捷項目管理怎么做?4大主流方法論對比及工具適配方案

在傳統瀑布式項目管理中,需求定義、設計、開發、測試等環節如同工業流水線般嚴格線性推進,展現出強大的流程控制能力。不過今天的軟件迭代周期已壓縮至周級乃至日級,瀑布式管理難以應對需求的快速變化,敏捷式項目管理則以“小步快…

解決YOLO模型從Python遷移到C++時目標漏檢問題——跨語言部署中的關鍵陷阱與解決方案

問題背景 當我們將Python訓練的YOLO模型部署到C環境時,常遇到部分目標漏檢問題。這通常源于預處理/后處理差異、數據類型隱式轉換或模型轉換誤差。本文通過完整案例解析核心問題并提供可落地的解決方案。 一、常見原因分析 預處理不一致 Python常用OpenCV&#xff…

【2025CCF中國開源大會】開放注冊與會議通知(第二輪)

點擊藍字 關注我們 CCF Opensource Development Committee 2025 CCF中國開源大會 由中國計算機學會主辦的 2025 CCF中國開源大會(CCF ChinaOSC)擬于 2025年8月2日-3日 在上海召開。本屆大會以“蓄勢引領、眾行致遠”為主題,由上海交通大學校長…

本地聊天室

測試版還沒測試過,后面更新不會繼續開源,有問題自行修復 開發環境: PHP版本7.2 Swoole擴展 本地服務器環境(如XAMPP、MAMP) 功能說明: 注冊/登錄系統,支持本地用戶數據存儲 ? 發送文本、圖片和語音消息 ? 實…

golang學習隨便記x-調試與雜類(待續)

編譯與調試 調試時從終端鍵盤輸入 調試帶有需要用戶鍵盤輸入的程序時,VSCode報錯:Unable to process evaluate: debuggee is running,因為調試器不知道具體是哪個終端輸入。需要配置啟動文件 .vscode/launch.json 類似如下(注意…

MultipartFile、File 和 Mat

1. MultipartFile (來自 Spring Web) 用途: 代表通過 multipart 形式提交(通常是 HTTP POST 請求)接收到的文件。 它是 Spring Web 中用于處理 Web 客戶端文件上傳的核心接口。 關鍵特性: 抽象: 這是一個接口&#xf…

.NET 9.0 SignalR 支持修剪和原生 AOT

什么是 SignalR? SignalR 是一個庫,可用于向應用程序添加實時 Web 功能。它提供了一個簡單的 API,用于創建可從服務器和客戶端調用的服務器到客戶端遠程過程調用 (RPC)。現在,SignalR 在 .NET 8.0 和 .NET 9.0 中支持修剪和原生 …

下載資源管理

本文章僅用于作者管理自己的站內資源,方便日后查找,后續更新資源該文章持續更新。 1、環境安裝 python3.11.11環境 python3.7.9 ARM.CMSIS.5.6.0(這個在站內重復上傳了) Nordic8.32.1 java8 2、工具類軟件安裝包 2.1、藍牙類 SI Connect 藍牙OT…

??FFmpeg命令全解析:三步完成視頻合并、精準裁剪??、英偉達顯卡加速

一、裁剪 常規裁剪 根據時長裁剪,常規的裁剪 -c copy 表示直接復制流(不重新編碼),速度極快,但要求切割時間必須是關鍵幀。否則裁剪下來的畫面開頭/結尾 會模糊花屏 ffmpeg -i input.mp4 -ss 00:00:30 -to 00:01:00 …

HTML5 更新的功能

文章目錄 前言**一、語義化標簽&#xff08;Semantic Elements&#xff09;****二、多媒體支持&#xff08;Audio & Video&#xff09;****三、圖形與繪圖&#xff08;Canvas & SVG&#xff09;****1. <canvas>****2. SVG 內聯支持** **四、表單增強&#xff08;…

React 全面入門與進階實戰教程

文章目錄 一、認識 React1.1 核心特點 二、快速搭建 React 項目2.1 使用 Create React App2.2 使用 Vite 創建更輕量的 React 項目2.3 項目結構概覽 三、React 核心語法基礎3.1 JSX&#xff1a;React 的模板語法3.2 函數組件與 Props3.3 useState&#xff1a;定義響應式狀態3.4…

牛津大學開源視頻中的開放世界目標計數!

視頻中的開放世界目標計數 GitHub PaPer Niki Amini-Naieni nikianrobots.ox.ac.uk Andrew Zisserman azrobots.ox.ac.uk 視覺幾何組&#xff08;VGG&#xff09;&#xff0c;牛津大學&#xff0c;英國 ? 圖 1&#xff1a;視頻中的目標計數&#xff1a;給定頂行的視頻&#…

什么是Sentinel?以及優缺點

Sentinel 是阿里巴巴開源的分布式系統流量控制組件&#xff0c;主要用于服務限流、熔斷降級、系統負載保護等場景&#xff0c;幫助提高微服務系統的穩定性和可靠性。它以流量為切入點&#xff0c;通過對流量的監控與控制&#xff0c;保障服務在高并發或異常情況下的可用性。 S…

2025 MWC 上海盛大開幕,聚焦AI、5G-Advanced及開放API

全球商業領袖與政策制定者齊聚一堂,共同探討中國在API創新中的引領地位與產業發展勢頭 2025年6月18日,上海——GSMA 2025 MWC 上海今日在上海浦東嘉里大酒店舉行開幕式,正式拉開帷幕。本屆為期三天的盛會在上海新國際博覽中心(SNIEC)舉行,匯聚約400位演講嘉賓與思想領袖,帶來主…

使用Python腳本進行日常管理

在IT行業&#xff0c;特別是在系統運維領域&#xff0c;效率和準確性是至關重要的。隨著技術的發展&#xff0c;手動處理大量的服務器和網絡設備變得越來越不可行。因此&#xff0c;自動化運維成為了解決這一問題的有效手段。Python&#xff0c;作為一種廣泛使用的編程語言&…

HCIA-數據通信基礎

前言&#xff1a;本博客僅作記錄學習使用&#xff0c;部分圖片出自網絡&#xff0c;如有侵犯您的權益&#xff0c;請聯系刪除 本篇筆記是根據B站上的視頻教程整理而成&#xff0c;感謝UP主的精彩講解&#xff01;如果需要了解更多細節&#xff0c;可以參考以下視頻&#xff1a;…

安全版V4.5密碼加密算法由SM3改為MD5

文章目錄 環境文檔用途詳細信息 環境 系統平臺&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;4.5 文檔用途 本文檔用于指導瀚高數據庫安全版V4.5的密碼加密算法由SM3改為MD5 詳細信息 1、用默認三權用戶和普通用戶登錄數據庫&#xff0c;修改密碼…

MyBatis中#{}和${}的深度解析:SQL注入與動態拼接的終極抉擇

MyBatis中#{}和${}的深度解析&#xff1a;SQL注入與動態拼接的終極抉擇 摘要&#xff1a;在MyBatis的Mapper.xml文件中&#xff0c;#{}和${}這兩個看似簡單的符號&#xff0c;卻隱藏著SQL安全與性能的核心秘密。本文將深入剖析它們的底層差異&#xff0c;并通過真實場景演示如何…

AWS多項目架構完全指南:基于App Runner的安全中轉服務設計

引言:云原生架構的演進之路 在數字化轉型浪潮中,企業常常面臨這樣的挑戰:如何在保證安全隔離的前提下,快速為多個項目部署服務,并實現與現有系統的無縫集成?本文將以真實案例為基礎,詳細介紹如何利用AWS App Runner、Transit Gateway和VPC連接器等現代化服務,構建高可…