- 鴻蒙操作系統(tǒng)應(yīng)用開發(fā)實踐
- 陳美汝 鄭森文等
- 2233字
- 2022-07-28 19:33:58
1.7 資源文件
1.7.1 Resource目錄介紹
HarmonyOS中的應(yīng)用程序會使用各種資源,例如圖片、字符串等,開發(fā)者會把它們放入源碼的相應(yīng)文件夾下面,HarmonyOS也支持并鼓勵開發(fā)者把與UI相關(guān)的布局和元素,用XML資源實現(xiàn)。
HarmonyOS中的資源文件分為兩大類,一類為base目錄與限定詞目錄,這一類中的資源為可直接訪問資源,可以用ResourceTable直接訪問,都保存在resource文件下,在編譯的情況下會自動生產(chǎn)ResourceTable.java文件,其中保存著每個資源的編號索引文件供開發(fā)者使用。另一類為rawfile目錄,rawfile目錄下的文件不能被ResourceTable直接訪問,只能通過指定文件路徑和文件名來引用。
1.7.2 Resource文件編寫
resources文件夾中的結(jié)構(gòu)如圖1.43所示。

圖1.43 resources文件結(jié)構(gòu)
其中,base文件夾和限定詞文件夾按照兩級目錄形式來組織,目錄命名必須符合規(guī)范,以便根據(jù)設(shè)備狀態(tài)去匹配相應(yīng)目錄下的資源文件,一級子目錄為base目錄和限定詞目錄。
base目錄是默認(rèn)存在的目錄。當(dāng)應(yīng)用的resources目錄中沒有與設(shè)備狀態(tài)匹配的限定詞目錄時,會自動引用該目錄中的資源文件。
限定詞目錄需要開發(fā)者自行創(chuàng)建。目錄名稱由一個或多個表征應(yīng)用場景或設(shè)備特征的限定詞組合而成,而二級子目錄為資源目錄,用于存放字符串、顏色、布爾值等基礎(chǔ)元素,以及媒體、動畫、布局等資源文件,下面詳細(xì)介紹一下。
首先介紹一下限定詞目錄的創(chuàng)建規(guī)則。限定詞目錄可以由一個或多個表征應(yīng)用場景或設(shè)備特征的限定詞組合而成,包括語言、文字、國家或地區(qū)、橫豎屏、設(shè)備類型和屏幕密度等6個維度,限定詞之間通過下畫線(_)或者中畫線(-)連接。開發(fā)者在創(chuàng)建限定詞目錄時,需要掌握限定詞目錄的命名要求及與限定詞目錄與設(shè)備狀態(tài)的匹配規(guī)則。之所以需要用到限定詞,就是為了讓資源限定在特定的情況下使用,如果限定詞目錄中包含語言、文字、橫豎屏、設(shè)備類型限定詞,則對應(yīng)限定詞的取值必須與當(dāng)前的設(shè)備狀態(tài)完全一致,這樣該目錄才能夠參與設(shè)備的資源匹配。例如,限定詞目錄zh_CN-car-ldpi不能參與en_US設(shè)備的資源匹配。
下面詳細(xì)說明下限定詞的創(chuàng)建規(guī)則。限定詞目錄的命名規(guī)則為語言_文字_國家或地區(qū)-橫豎屏-設(shè)備類型-屏幕密度。開發(fā)者可以根據(jù)應(yīng)用的使用場景和設(shè)備特征,選擇其中的一類或幾類限定詞組成目錄名稱。語言、文字、國家或地區(qū)之間采用下畫線(_)連接,除此之外的其他限定詞之間均采用中畫線(-)連接。例如zh_Hant_CN、zh_CN-car-ldpi。
然后詳細(xì)說明一下限定詞的類型。上述講到限定詞目錄的命名規(guī)則為語言_文字_國家或地區(qū)-橫豎屏-設(shè)備類型-屏幕密度。其中第1個限定詞語言表示設(shè)備使用的語言類型,由2個小寫字母組成。例如zh表示中文,en表示英語。具體詳細(xì)取值范圍,可以參見ISO 639-1(ISO制定的語言編碼標(biāo)準(zhǔn))。
第2個限定詞文字表示設(shè)備使用的文字類型,由1個大寫字母(首字母)和3個小寫字母組成。例如Hans表示簡體中文,Hant表示繁體中文。具體詳細(xì)取值范圍,參見ISO 15924(ISO制定的文字編碼標(biāo)準(zhǔn))。
第3個限定詞表示用戶所在的國家或地區(qū),由2~3個大寫字母或者3個數(shù)字組成。例如CN表示中國,GB表示英國。具體詳細(xì)取值范圍,參見ISO 3166-1(ISO制定的國家和地區(qū)編碼標(biāo)準(zhǔn))。
第4個限定詞表示橫豎屏,其中,vertical代表豎屏,horizontal代表橫屏,再后面是設(shè)備類型和屏幕密度,具體規(guī)則可以查閱官方文檔。
在為設(shè)備匹配對應(yīng)的資源文件時,限定詞目錄匹配的優(yōu)先級從高到低依次為區(qū)域(語言_文字_國家或地區(qū))>橫豎屏>設(shè)備類型>屏幕密度。
資源組目錄創(chuàng)建規(guī)則如下,base目錄和限定詞目錄下可以創(chuàng)建資源組目錄,包括element、media、animation、layout、graphic、profile 6種文件夾目錄,可以分別存放不同的資源,如圖1.44所示。

圖1.44 資源組目錄結(jié)構(gòu)
(1)element: element表示元素資源,其下的每個資源文件都用相應(yīng)的JSON文件來表征。
boolean表示布爾型,boolean.json的示例代碼如下:
//boolean.json { "boolean":[ { "name":"boolean_1", "value":true }, { "name":"boolean_ref", "value":"$ boolean:boolean_1" } ] }
color表示顏色,color.json的示例代碼如下:
//color.json { "color":[ { "name":"red", "value":"#ff0000" }, { "name":"red_ref", "value":"$ color:red" } ] }
float表示浮點型,float.json的示例代碼如下:
//float.json { "float":[ { "name":"float_1", "value":"30.6" }, { "name":"float_ref", "value":"$ float:float_1" }, { "name":"float_px", "value":"100px" } ] }
intarray表示整型數(shù)組,intarray.json的示例代碼如下:
//intarray.json { "intarray":[ { "name":"intarray_1", "value":[ 100, 200, "$ integer:integer_1" ] } ] }
integer表示整型,integer.json的示例代碼如下:
//integer.json { "integer":[ { "name":"integer_1", "value":100 }, { "name":"integer_ref", "value":"$ integer:integer_1" } ] }
pattern表示樣式,pattern.json的示例代碼如下:

plural表示復(fù)數(shù)形式,plural.json的示例代碼如下:

strarray表示字符串?dāng)?shù)組,strarray.json的示例代碼如下:

string表示字符串,string.json的示例代碼如下:

(2)media: media表示媒體資源,包括圖片、聲頻、視頻等非文本格式的文件。媒體資源文件名可自定義,例如icon.png,如圖1.45所示。

圖1.45 媒體資源文件
(3)animation: animation表示動畫資源,其中資源采用XML文件格式表示。文件名可自定義,例如zoom_in.xml。
(4)layout: layout表示布局資源,其中資源采用XML文件格式表示。詳細(xì)布局內(nèi)容參考第3章Java UI布局。
(5)graphic: graphic表示可繪制資源,其中資源采用XML文件格式表示,如圖1.46所示。

圖1.46 XML文件
如要定義一個白色,圓角為5dip的橢圓,可以創(chuàng)建一個white_radius的XML文件,代碼如下:
<?xml version = "1.0"encoding = "utf-8"?> <shape xmlns:ohos = "http://schemas.huawei.com/res/ohos" ohos:shape = "oval"> <solid ohos:color = "#88ffffff"/> <corners ohos:radius = "5dip"/> </shape >
(6)profile: profile表示其他類型文件,以原始文件形式保存,文件名可以隨意定義。
1.7.3 Resource文件使用
1.Java代碼訪問資源組文件
base目錄與限定詞目錄中的資源文件可以通過指定資源類型(type)和資源名稱(name)來引用。Java文件引用資源文件的格式為ResourceTable.type_name。特別地,如果引用的是系統(tǒng)資源,則采用ohos.global.systemres.ResourceTable.type_name。
如在Java文件中,引用string.json文件中類型為String、名稱為app_name的資源,則代碼如下:
ohos.global.resource.ResourceManager resManager = getAbilityContext().getResourceManager(); String result = resManager.getElement(ResourceTable.String_app_name).getString();
在Java文件中,引用color.json文件中類型為Color、名稱為red的資源,則代碼如下:
ohos.global.resource.ResourceManager resManager = getAbilityContext().getResourceManager(); int color = resManager.getElement(ResourceTable.Color_red).getColor();
2.Java代碼訪問原生資源文件
訪問原生資源文件可以通過指定文件路徑和文件名稱來引用。
例如在Java文件中,引用一個路徑為resources/rawfile/、名稱為example.js的資源文件,則代碼如下:
ohos.global.resource.ResourceManager resManager = getAbilityContext().getResourceManager(); ohos.global.resource.RawFileEntry rawFileEntry = resManager.getRawFileEntry("resources/ rawfile/example.js");
3.XML文件中引用資源文件
如果需要在XML文件中引用資源文件,需要用$ type: name來引用。如果引用的是系統(tǒng)資源,則采用$ ohos: type: name。
例如,在XML文件中,引用string.json文件中類型為String、名稱為app_name的資源,則代碼如下:
<?xml version = "1.0"encoding = "utf-8"?> <DirectionalLayout xmlns:ohos = "http://schemas.huawei.com/res/ohos" ohos:width = "match_parent" ohos:height = "match_parent" ohos:orientation = "vertical"> <Text ohos:text = "$ string:app_name"/> </DirectionalLayout >
- 全屋互聯(lián):智能家居系統(tǒng)開發(fā)指南
- Windows Vista基礎(chǔ)與應(yīng)用精品教程
- Learning Android Intents
- Instant Handlebars.js
- Ganglia系統(tǒng)監(jiān)控
- 網(wǎng)絡(luò)操作系統(tǒng)教程:Windows Server 2016管理與配置
- Linux內(nèi)核觀測技術(shù)BPF
- iOS 10快速開發(fā):18天零基礎(chǔ)開發(fā)一個商業(yè)應(yīng)用
- Web Penetration Testing with Kali Linux(Third Edition)
- Agile IT Security Implementation Methodology
- Office 365 User Guide
- OpenHarmony開發(fā)與實踐:基于紅莓RK2206開發(fā)板
- Microsoft Hyper-V Cluster Design
- 鴻蒙HarmonyOS應(yīng)用開發(fā)入門
- Serverless Architectures with Kubernetes