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

1.7 資源文件

1.7.1 Resource目錄介紹

HarmonyOS中的應用程序會使用各種資源,例如圖片、字符串等,開發者會把它們放入源碼的相應文件夾下面,HarmonyOS也支持并鼓勵開發者把與UI相關的布局和元素,用XML資源實現。

HarmonyOS中的資源文件分為兩大類,一類為base目錄與限定詞目錄,這一類中的資源為可直接訪問資源,可以用ResourceTable直接訪問,都保存在resource文件下,在編譯的情況下會自動生產ResourceTable.java文件,其中保存著每個資源的編號索引文件供開發者使用。另一類為rawfile目錄,rawfile目錄下的文件不能被ResourceTable直接訪問,只能通過指定文件路徑和文件名來引用。

1.7.2 Resource文件編寫

resources文件夾中的結構如圖1.43所示。

圖1.43 resources文件結構

其中,base文件夾和限定詞文件夾按照兩級目錄形式來組織,目錄命名必須符合規范,以便根據設備狀態去匹配相應目錄下的資源文件,一級子目錄為base目錄和限定詞目錄。

base目錄是默認存在的目錄。當應用的resources目錄中沒有與設備狀態匹配的限定詞目錄時,會自動引用該目錄中的資源文件。

限定詞目錄需要開發者自行創建。目錄名稱由一個或多個表征應用場景或設備特征的限定詞組合而成,而二級子目錄為資源目錄,用于存放字符串、顏色、布爾值等基礎元素,以及媒體、動畫、布局等資源文件,下面詳細介紹一下。

首先介紹一下限定詞目錄的創建規則。限定詞目錄可以由一個或多個表征應用場景或設備特征的限定詞組合而成,包括語言、文字、國家或地區、橫豎屏、設備類型和屏幕密度等6個維度,限定詞之間通過下畫線(_)或者中畫線(-)連接。開發者在創建限定詞目錄時,需要掌握限定詞目錄的命名要求及與限定詞目錄與設備狀態的匹配規則。之所以需要用到限定詞,就是為了讓資源限定在特定的情況下使用,如果限定詞目錄中包含語言、文字、橫豎屏、設備類型限定詞,則對應限定詞的取值必須與當前的設備狀態完全一致,這樣該目錄才能夠參與設備的資源匹配。例如,限定詞目錄zh_CN-car-ldpi不能參與en_US設備的資源匹配。

下面詳細說明下限定詞的創建規則。限定詞目錄的命名規則為語言_文字_國家或地區-橫豎屏-設備類型-屏幕密度。開發者可以根據應用的使用場景和設備特征,選擇其中的一類或幾類限定詞組成目錄名稱。語言、文字、國家或地區之間采用下畫線(_)連接,除此之外的其他限定詞之間均采用中畫線(-)連接。例如zh_Hant_CN、zh_CN-car-ldpi。

然后詳細說明一下限定詞的類型。上述講到限定詞目錄的命名規則為語言_文字_國家或地區-橫豎屏-設備類型-屏幕密度。其中第1個限定詞語言表示設備使用的語言類型,由2個小寫字母組成。例如zh表示中文,en表示英語。具體詳細取值范圍,可以參見ISO 639-1(ISO制定的語言編碼標準)。

第2個限定詞文字表示設備使用的文字類型,由1個大寫字母(首字母)和3個小寫字母組成。例如Hans表示簡體中文,Hant表示繁體中文。具體詳細取值范圍,參見ISO 15924(ISO制定的文字編碼標準)。

第3個限定詞表示用戶所在的國家或地區,由2~3個大寫字母或者3個數字組成。例如CN表示中國,GB表示英國。具體詳細取值范圍,參見ISO 3166-1(ISO制定的國家和地區編碼標準)。

第4個限定詞表示橫豎屏,其中,vertical代表豎屏,horizontal代表橫屏,再后面是設備類型和屏幕密度,具體規則可以查閱官方文檔。

在為設備匹配對應的資源文件時,限定詞目錄匹配的優先級從高到低依次為區域(語言_文字_國家或地區)>橫豎屏>設備類型>屏幕密度。

資源組目錄創建規則如下,base目錄和限定詞目錄下可以創建資源組目錄,包括element、media、animation、layout、graphic、profile 6種文件夾目錄,可以分別存放不同的資源,如圖1.44所示。

圖1.44 資源組目錄結構

(1)element: element表示元素資源,其下的每個資源文件都用相應的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表示整型數組,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表示復數形式,plural.json的示例代碼如下:

strarray表示字符串數組,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文件格式表示。詳細布局內容參考第3章Java UI布局。

(5)graphic: graphic表示可繪制資源,其中資源采用XML文件格式表示,如圖1.46所示。

圖1.46 XML文件

如要定義一個白色,圓角為5dip的橢圓,可以創建一個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。特別地,如果引用的是系統資源,則采用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來引用。如果引用的是系統資源,則采用$ 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 >
主站蜘蛛池模板: 灵寿县| 岱山县| 台中市| 三亚市| 秭归县| 师宗县| 大厂| 综艺| 商南县| 封丘县| 镶黄旗| 搜索| 天津市| 咸阳市| 邯郸市| 贵德县| 喀什市| 腾冲县| 平度市| 密云县| 台湾省| 遂昌县| 宣武区| 华安县| 阿城市| 虞城县| 宣威市| 贡嘎县| 台北县| 秦皇岛市| 西青区| 武清区| 鹰潭市| 达孜县| 合肥市| 双牌县| 高台县| 巴青县| 紫金县| 农安县| 天长市|