<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          HarmonyOS學(xué)習(xí)路之開發(fā)基礎(chǔ)知識——資源文件

          共 20337字,需瀏覽 41分鐘

           ·

          2021-06-26 23:18

          點擊上方藍(lán)色字體,關(guān)注我們





          1


          資源文件的分類


          resources目錄


          應(yīng)用的資源文件(字符串、圖片、音頻等)統(tǒng)一存放于resources目錄下,便于開發(fā)者使用和維護(hù)。


          resources目錄包括兩大類目錄,一類為base目錄與限定詞目錄,另一類為rawfile目錄 資源目錄示例:


          resources
          |---base  // 默認(rèn)存在的目錄
          |   |---element
          |   |   |---string.json
          |   |---media
          |   |   |---icon.png
          |---en_GB-vertical-car-mdpi // 限定詞目錄示例,需要開發(fā)者自行創(chuàng)建   
          |   |---element
          |   |   |---string.json
          |   |---media
          |   |   |---icon.png
          |---rawfile  // 默認(rèn)存在的目錄


          2


          限定詞目錄



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

          限定詞目錄的命名要求


          • 限定詞的組合順序:移動國家碼_移動網(wǎng)絡(luò)碼-語言_文字_國家或地區(qū)-橫豎屏-設(shè)備類型-深色模式-屏幕密度。開發(fā)者可以根據(jù)應(yīng)用的使用場景和設(shè)備特征,選擇其中的一類或幾類限定詞組成目錄名稱。
          • 限定詞的連接方式:語言、文字、國家或地區(qū)之間采用下劃線()連接,移動國家碼和移動網(wǎng)絡(luò)碼之間也采用下劃線()連接,除此之外的其他限定詞之間均采用中劃線(-)連接。例如:zh_Hant_CN、zh_CN-car-ldpi。
          • 限定詞的取值范圍:每類限定詞的取值必須符合表2中的條件,否則,將無法匹配目錄中的資源文件。

          限定詞目錄與設(shè)備狀態(tài)的匹配規(guī)則


          • 在為設(shè)備匹配對應(yīng)的資源文件時,限定詞目錄匹配的優(yōu)先級從高到低依次為:移動國家碼和移動網(wǎng)絡(luò)碼 > 區(qū)域(語言_文字_國家或地區(qū))> 橫豎屏 > 設(shè)備類型 > 顏色模式 > 屏幕密度。
          • 如果限定詞目錄中包含移動國家碼和移動網(wǎng)絡(luò)碼、語言、文字、橫豎屏、設(shè)備類型、顏色模式限定詞,則對應(yīng)限定詞的取值必須與當(dāng)前的設(shè)備狀態(tài)完全一致,該目錄才能夠參與設(shè)備的資源匹配。例如,限定詞目錄“zh_CN-car-ldpi”不能參與“en_US”設(shè)備的資源匹配。

          3


          資源組目錄



          base目錄與限定詞目錄下面可以創(chuàng)建資源組目錄(包括element、media、animation、layout、graphic、profile),用于存放特定類型的資源文件。


          • element:表示元素資源,以下每一類數(shù)據(jù)都采用相應(yīng)的JSON文件來表征。

          • media:表示媒體資源,包括圖片、音頻、視頻等非文本格式的文件。

          • animation:表示動畫資源,采用XML文件格式。

          • layout:表示布局資源,采用XML文件格式。

          • graphic:表示可繪制資源,采用XML文件格式。profile:表示其他類型文件,以原始文件形式保存。


          4


          創(chuàng)建資源文件



          在resources目錄下,可按照限定詞目錄和資源組目錄的說明創(chuàng)建子目錄和目錄內(nèi)的文件。同時,DevEco Studio也提供了創(chuàng)建資源目錄和資源文件的界面。


          • 創(chuàng)建資源目錄及資源文件在resources目錄右鍵菜單選擇“New > Harmony Resource File”,此時可同時創(chuàng)建目錄和文件。文件默認(rèn)創(chuàng)建在base目錄的對應(yīng)資源組下。如果選擇了限定詞,則會按照命名規(guī)范自動生成限定詞+資源組目錄,并將文件創(chuàng)建在目錄中。目錄名自動生成,格式固定為“限定詞.資源組”,例如創(chuàng)建一個限定詞為橫豎屏類別下的豎屏,資源組為繪制資源的目錄,自動生成的目錄名稱為“vertical.graphic”。


          • 創(chuàng)建資源目錄在resources目錄右鍵菜單選擇“New > Harmony Resource Directory”,此時可創(chuàng)建資源目錄。選擇資源組類型,設(shè)置限定詞,創(chuàng)建后自動生成目錄名稱。目錄名稱格式固定為“限定詞.資源組”,例如創(chuàng)建一個限定詞為橫豎屏類別下的豎屏,資源組為繪制資源的目錄,自動生成的目錄名稱為“vertical.graphic”。


          • 創(chuàng)建資源文件在資源目錄的右鍵菜單選擇“New > XXX Resource File”,即可創(chuàng)建對應(yīng)資源組目錄的資源文件。例如,在element目錄下可新建Element Resource File。



          5


          資源文件的使用



          資源文件的引用方法


          base目錄與限定詞目錄中的資源文件:通過指定資源類型(type)和資源名稱(name)來引用。


          • Java文件引用資源文件的格式ResourceTable.type_name。特別地,如果引用的是系統(tǒng)資源,則采用:ohos.global.systemres.ResourceTable.type_name。



          ohos.global.resource.ResourceManager resManager = this.getResourceManager();
          String result = resManager.getElement(ResourceTable.String_app_name).getString();


          ohos.global.resource.ResourceManager resManager = this.getResourceManager();
          int color = resManager.getElement(ResourceTable.Color_red).getColor();

            • 示例二:在Java文件中,引用color.json文件中類型為“Color”、名稱為“red”的資源。
            • 示例一:在Java文件中,引用string.json文件中類型為“String”、名稱為“app_name”的資源。
          • XML文件引用資源文件的格式: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>


          rawfile目錄中的資源文件:通過指定文件路徑和文件名稱來引用。在Java文件中,引用一個路徑為“resources/rawfile/”、名稱為“example.js”的資源文件,示例如下:


          ohos.global.resource.ResourceManager resManager = this.getResourceManager();
          ohos.global.resource.RawFileEntry rawFileEntry = resManager.getRawFileEntry("resources/rawfile/example.js"); 

          系統(tǒng)資源文件


          ic_app:表示HarmonyOS應(yīng)用的默認(rèn)圖標(biāo)。request_location_reminder_title:表示“請求使用設(shè)備定位功能”的提示標(biāo)題。request_location_reminder_content:表示“請求使用設(shè)備定位功能”的提示內(nèi)容,即:請在下拉快捷欄打開"位置信息"開關(guān)。

          顏色模式的定義


          應(yīng)用可以在config.json的module字段下定義“colorMode”字段,“colorMode”字段用來定義應(yīng)用自身的顏色模式,值可以是“dark”,“l(fā)ight”,“auto”(默認(rèn)值)。示例:


          "colorMode""light"


          當(dāng)應(yīng)用的顏色模式值是“dark”時,無論系統(tǒng)當(dāng)前顏色模式是什么,應(yīng)用始終會按照深色模式選取資源;同理,當(dāng)應(yīng)用的顏色模式值是“l(fā)ight”時,無論系統(tǒng)當(dāng)前顏色模式是什么,應(yīng)用始終會按照淺色模式選取資源;當(dāng)應(yīng)用的顏色模式值是“auto”時,應(yīng)用會跟隨系統(tǒng)的顏色模式值選取資源。應(yīng)用可以在代碼中通過如下方式獲取應(yīng)用當(dāng)前的顏色模式:


          int colorMode = Configuration.colorMode;

          為Element資源文件添加注釋或特殊標(biāo)識


          Element目錄下的不同種類元素的資源均采用JSON文件表示,資源的名稱“name”和取值“value”是每一條資源的必備字段。


          • 如果需要為某一條資源備注信息,以便于資源的理解和使用,可以通過comment字段添加注釋。
          • 如果value字段中的部分文本不需要被翻譯人員處理,也不會被顯示在應(yīng)用界面上,可以通過特殊結(jié)構(gòu)來標(biāo)識無需翻譯的內(nèi)容。

          通過comment字段添加注釋


          通過comment字段,可以為JSON文件的資源添加注釋。示例如下:


          {
              "string":[
                  {
                      "name":"message_arrive",
                      "value":"We will arrive at %s",
                      "comment":"Transfer Arrival Time. %s is time,like 5:00 am"
                  }
              ]
          }

          通過特殊結(jié)構(gòu)來標(biāo)識無需翻譯的內(nèi)容


          在string、strarray、plural這三類資源中,可以通過特殊標(biāo)識來處理無需被翻譯的內(nèi)容。例如,一個字符串資源的Value取值為“We will arrive at %s”,其中的變量“%s”在翻譯過程中希望保持不變。有以下兩種方式處理:


          • 方式一:在value字段中添加{}。示例如下:

          {
              "string":[
                  {
                      "name":"message_arrive",
                      "value":["We will arrive at",{
                          "id":"time",
                          "example":"5:00 am",
                          "value":"%s"
                      }
                      ]
                  }
              ]
          }
          • 方式二:添加<xliff:g></xliff:g>標(biāo)記對。示例如下:

          {
              "string":[
                  {
                      "name":"message_arrive",
                      "value":"We will arrive at <xliff:g id='time' example='5:00 am'>%s</xliff:g>"
                  }
              ]
          }

          boolean.json示例


          {
              "boolean":[
                  {
                      "name":"boolean_1",
                      "value":true
                  },
                  {
                      "name":"boolean_ref",
                      "value":"$boolean:boolean_1"
                  }
              ]
          }

          color.json示例


          {
              "color":[
                  {
                      "name":"red",
                      "value":"#ff0000"
                  },
                  {
                      "name":"red_ref",
                      "value":"$color:red"
                  }
              ]
          }

          float.json示例


          {
              "float":[
                  {
                      "name":"float_1",
                      "value":"30.6"
                  },
                  {
                      "name":"float_ref",
                      "value":"$float:float_1"
                  },
                  {
                      "name":"float_px",
                      "value":"100px"
                  }
              ]
          }

          intarray.json示例


          {
              "intarray":[
                  {
                      "name":"intarray_1",
                      "value":[
                          100,
                          200,
                          "$integer:integer_1"
                      ]
                  }
              ]
          }

          integer.json示例


          {
              "integer":[
                  {
                      "name":"integer_1",
                      "value":100
                  },
                  {
                      "name":"integer_ref",
                      "value":"$integer:integer_1"
                  }
              ]
          }

          pattern.json示例


          {
              "pattern":[
                  {
                      "name":"base",
                      "value":[
                          {
                              "name":"width",
                              "value":"100vp"
                          },
                          {
                              "name":"height",
                              "value":"100vp"
                          },
                          {
                              "name":"size",
                              "value":"25px"
                          }
                      ]
                  },
                  {
                     "name":"child",
                     "parent":"base",
                     "value":[
                         {
                             "name":"noTitile",
                             "value":"Yes"
                         }
                     ]
                  }
              ]
          }

          plural.json示例


          {
              "plural":[
                  {
                      "name":"eat_apple",
                      "value":[
                          {
                              "quantity":"one",
                              "value":"%d apple"
                          },
                          {
                              "quantity":"other",
                              "value":"%d apples"
                          }
                      ]
                  }
              ]
          }

          strarray.json示例


          {
              "strarray":[
                 {
                     "name":"size",
                     "value":[
                         {
                             "value":"small"
                         },
                         {
                             "value":"$string:hello"
                         },
                         {
                             "value":"large"
                         },
                         {
                             "value":"extra large"
                         }
                      ]
                 }
              ]
          }

          string.json示例


          {
              "string":[
                  {
                      "name":"hello",
                      "value":"hello base"
                  },
                  {
                      "name":"app_name",
                      "value":"my application"
                  },
                  {
                      "name":"app_name_ref",
                      "value":"$string:app_name"
                  },
                  {
                      "name":"app_sys_ref",
                      "value":"$ohos:string:request_location_reminder_title"
                  }
              ]
          }

          6


          國際化能力的支持


          時間日期國際化


          不同的區(qū)域具有不同的時間日期顯示習(xí)慣。例如,英語(美國)區(qū)域short時間格式為“9:31 AM”;簡體中文(中國)區(qū)域short時間格式為“上午9:31”;芬蘭語(芬蘭)區(qū)域short時間格式為“9.31”。因此為開發(fā)者提供了獲取不同區(qū)域的時間日期規(guī)格的能力。


          界面時間日期字串和時間類控件顯示,應(yīng)當(dāng)遵循當(dāng)?shù)亓?xí)慣的規(guī)則,當(dāng)需要展示時間或日期時,建議獲取當(dāng)前地區(qū)的時間日期規(guī)格,并對顯示的字串根據(jù)獲取到的規(guī)格進(jìn)行格式化后再使用。


          示例1:

          Locale locale = new Locale("de""CH");
          String skeleton = "MMMMd";
          String bestPattern = DateFormatUtil.getBestPattern(skeleton, locale); // 返回值為"d. MMMM"

          示例2:

          String languageTag = "zh";
          String out = DateFormatUtil.format("EEEEdMMMMy", languageTag, "Asia/Shanghai"03600 * 1000); // 返回值為"1970年1月1日星期四"

          電話號碼國際化


          不同的區(qū)域的電話號碼有不同的格式化效果,當(dāng)需要展示本地電話號碼時,應(yīng)遵循當(dāng)?shù)仉娫捥柎a的格式化原則。因此為開發(fā)者提供了對不同地區(qū)電話號碼格式化的能力,以便于在顯示電話號碼時正確的格式化。并提供了獲取電話號碼歸屬地的能力,開發(fā)者可以使用相關(guān)接口獲取電話號碼的歸屬地信息。


          示例1:

          InputFormatter formatter = InputFormatter.getInstance("CN");
          formatter.inputNumberAndRememberPosition('1'); // 返回值為"1"
          formatter.inputNumber('5'); // 返回值為"15"
          formatter.inputNumber('6'); // 返回值為"156"
          formatter.inputNumberAndRememberPosition('1');// 返回值為"156 1"

          示例2:

          Locale.Builder builder = new Locale.Builder();
          builder.setLanguage("zh");
          builder.setRegion("CN");
          builder.setScript("Hant");
          Locale locale = builder.build();
          String displayName = PhoneNumberAttribution.getAttribute("+8615611xxxxxx""CN", locale); // x為任意數(shù)字,返回值為"北京市"

          文本識別


          提供了對地址、時間日期與電話號碼的文本識別能力,可以調(diào)用相關(guān)接口識別一段文本中包含的地址、時間日期與電話號碼。示例:


          // 當(dāng)Locale.getDefault().getLanguage()為"en"時
          String source = "it is 123 test St";
          int[] re = TextRecognitionUtils.getAddress(source);
          if (re[0] == 1) {
              result = source.substring(re[1], re[2] + 1);// 返回值為"123 main St"
          }

          度量衡格式化


          提供了對度量衡國際化能力的支持,可支持度量衡體系和維度之間的轉(zhuǎn)換,與不同國家度量衡體系的自動轉(zhuǎn)換。在開發(fā)包含度量衡的功能時,可以調(diào)用此能力滿足多語言和不同國家用戶的需求。


          示例1:

          Locale zhCN = Locale.CHINA;
          MeasureFormatter mes = MeasureFormatter.getInstance(zhCN);
          mes.format(MeasureOptions.Unit.AREA_UK_ACRE,
                     10000,
                     MeasureOptions.Usage.AREA_LAND_AGRICULT,
                     MeasureOptions.FormatStyle.WIDE,
                     MeasureOptions.Style.AUTO_STYLE_ON));// 返回值為"4,046.856公頃"

          示例2:

          Locale enUS = Locale.US;
          MeasureFormatter mes = MeasureFormatter.getInstance(enUS);
          mes.format(MeasureOptions.Unit.VOLUME_US_CUP,
                     1000,
                     MeasureOptions.Unit.VOLUME_SI_LITER,
                     MeasureOptions.FormatStyle.WIDE));// 返回值為"236.588 liters"

          敏感禁忌


          提供對政治敏感地區(qū)、城市、及語言的獲取能力,以及對地區(qū)名稱更正的能力。示例:


          Locale locale = Locale.getDefault();
          ArrayList<String> result = LocaleHelperUtils.getBlockedRegions(context, locale);//返回值包含"EH"與"XK"(西撒哈拉與科索沃),這兩個地區(qū)為有政治爭議的地區(qū)需謹(jǐn)慎使用


          往期推薦



          點擊閱讀原文,更精彩~
          瀏覽 82
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲视频欧美视频视频一区 | 亚洲少妇视频 | 日本成人中文字幕 | 中文字幕亚洲高清 | 加勒比无码在线 |