官术网_书友最值得收藏!

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 >
主站蜘蛛池模板: 卢龙县| 鲁甸县| 星子县| 桐梓县| 澳门| 历史| 滦南县| 云霄县| 兴业县| 台中市| 库尔勒市| 永泰县| 海南省| 太仓市| 汕头市| 宁城县| 沁源县| 南澳县| 白山市| 通渭县| 临沂市| 鱼台县| 长沙市| 和林格尔县| 平阳县| 房产| 康平县| 杭锦后旗| 常州市| 玉山县| 苏尼特右旗| 盘山县| 伊金霍洛旗| 南部县| 宜川县| 南涧| 喀喇| 明水县| 德庆县| 冕宁县| 墨脱县|