android應用資源概覽

      網友投稿 848 2025-04-04

      應用資源概覽

      資源是指代碼使用的附加文件和靜態內容,例如位圖、布局定義、界面字符串、動畫說明等。

      您應始終外部化應用資源(例如圖像和代碼中的字符串),以便單獨對其進行維護。此外,您還應為特定設備配置提供備用資源,方法是將其進行分組并放入專門命名的資源目錄中。在運行時,Android 會根據當前配置使用合適的資源。例如,您可能需根據屏幕尺寸提供不同的界面布局,或根據語言設置提供不同的字符串。

      外部化應用資源后,您便可使用在項目 R 類中生成的資源 ID 來訪問這些資源。本文檔會介紹如何對 Android 項

      分組資源類型

      您應將各類資源放入項目 res/ 目錄的特定子目錄中。例如,以下是一個簡單項目的文件層次結構:

      MyProject/ src/ MyActivity.java res/ drawable/ graphic.png layout/ main.xml info.xml mipmap/ icon.png values/ strings.xml

      如此示例所示,res/ 目錄包含所有資源(在子目錄中):一個圖像資源、兩個布局資源、啟動器圖標的 mipmap/ 目錄以及一個字符串資源文件。資源目錄名稱非常重要,具體說明請見表 1。

      **請注意:**如需了解有關使用 mipmap 文件夾的詳細信息,請參閱管理項目概覽。意:**切勿將資源文件直接保存在 res/ 目錄內,因為這樣會造成編譯錯誤。

      如需了解有關特定資源類型的詳細信息,請參閱資源類型文檔。

      在表 1 定義的子目錄中,保存的資源為“默認”資源。換言之,這些資源定義應用的默認設計和內容。然而,不同類型的 Android 設備可能需要不同類型的資源。例如,如果設備屏幕比標準屏幕大,則應提供不同的布局資源,從而充分利用額外的屏幕空間。或者,如果設備的語言設置不同,則應提供不同的字符串資源,以便將界面中的文本轉換為其他語言。如要為不同設備配置提供這些不同資源,除默認資源以外,您還需提供備用資源。

      提供備用資源

      幾乎每個應用都應提供備用資源,以便支持特定的設備配置。例如,對于不同的屏幕密度和語言,您應分別加入備用可繪制對象資源和備用字符串資源。在運行時,Android 會檢測當前設備配置并為應用加載合適的資源。

      圖 1. 兩種不同的設備,均使用不同的布局資源。

      為一組資源指定配置特定的備用資源:

      res/

      中創建以

      -

      形式命名的新目錄。

      是相應默認資源的目錄名稱(如表 1 中所定義)。

      是指定要使用這些資源的各個配置的名稱(如表 2 中所定義)。

      您可以追加多個 。以短劃線將其分隔。

      **注意:**追加多個限定符時,必須按照表 2 中列出的相同順序放置限定符。如果限定符的順序錯誤,則該資源將被忽略。

      將相應的備用資源保存在此新目錄下。這些資源文件必須與默認資源文件完全同名。

      例如,以下是一些默認資源和備用資源:

      res/ drawable/ icon.png background.png drawable-hdpi/ icon.png background.png

      hdpi 限定符表示該目錄中的資源適用于屏幕密度較高的設備。其中,每個可繪制對象目錄中的圖像均已針對特定的屏幕密度調整了大小,但文件名完全相同。如此一來,用于引用 icon.png 或 background.png 圖像的資源 ID 始終相同,但 Android 會通過將設備配置信息與資源目錄名稱中的限定符進行比較,選擇最符合當前設備的各個資源版本。

      Android 支持若干配置限定符,您可以通過使用短劃線分隔每個限定符,從而向一個目錄名稱添加多個限定符。表 2 按優先級順序列出了有效的配置限定符;如果對資源目錄使用多個限定符,則必須按照表中所列順序將其添加到目錄名稱中。

      **請注意:**自 Android 1.0 起便已添加部分配置限定符,因此并非所有版本的 Android 系統都支持所有限定符。使用新限定符會隱式添加平臺版本限定符,因此較舊版本系統的設備必然會忽略它。例如,使用 w600dp 限定符會自動包括 v13 限定符,因為可用寬度限定符是 API 級別 13 中的新增配置。為避免出現任何問題,請始終包含一組默認資源(一組不帶限定符的資源)。如需了解詳細信息,請參閱利用資源提供最佳設備兼容性部分。

      限定符命名規則

      以下是一些關于使用配置限定符名稱的規則:

      您可以為單組資源指定多個限定符,并使用短劃線分隔。例如,drawable-en-rUS-land 適用于屏幕方向為橫向的美國英語設備。

      這些限定符必須遵循中列出的順序。例如:

      錯誤:drawable-hdpi-port/

      正確:drawable-port-hdpi/

      不能嵌套備用資源目錄。例如,您的目錄不能為 res/drawable/drawable-en/。

      值不區分大小寫。在處理之前,資源編譯器會將目錄名稱轉換為小寫,以免不區分大小寫的文件系統出現問題。名稱中使用的所有大寫字母只是為了便于認讀。

      每種限定符類型僅支持一個值。例如,若要對西班牙語和法語使用相同的可繪制對象文件,則您不能擁有名為 drawable-rES-rFR/ 的目錄,而是需要兩個包含相應文件的資源目錄,如 drawable-rES/ 和 drawable-rFR/。然而,您實際無需在兩處復制相同的文件。相反,您可以創建指向資源的別名。請參閱下面的創建別名資源。

      在將備用資源保存到以這些限定符命名的目錄中后,Android 會根據當前設備配置在應用中自動應用這些資源。每次請求資源時,Android 都會檢查備用資源目錄是否包含所請求的資源文件,然后查找最佳匹配資源(下文進行介紹)。如果沒有與特定設備配置相匹配的備用資源,則 Android 會使用相應的默認資源(一組用于不含配置限定符的特定資源類型的資源)。

      創建別名資源

      如果您想將某一資源用于多種設備配置(但不想以默認資源的形式提供該資源),則無需將同一資源放入多個備用資源目錄中。相反,您可以(在某些情況下)創建備用資源,充當默認資源目錄中所保存資源的別名。

      **請注意:**并非所有資源都會提供相應機制,以便您創建指向其他資源的別名。特別是,xml/ 目錄中的動畫資源、菜單資源、原始資源及其他未指定資源均不提供此功能。

      例如,假設您有一個應用圖標 icon.png,并且需要用于不同語言區域的獨特版本。但是,加拿大英語和加拿大法語這兩種語言區域需使用同一版本。您可能會認為,需要將相同圖像復制到加拿大英語和加拿大法語所對應的資源目錄中,但事實并非如此。相反,您可以將用于二者的圖像保存為 icon_ca.png(除 icon.png 以外的任何名稱),并將其放入默認的 res/drawable/ 目錄中。然后,在 res/drawable-en-rCA/ 和 res/drawable-fr-rCA/ 中創建 icon.xml 文件,使用 元素引用 icon_ca.png 資源。這樣,您只需存儲 PNG 文件的一個版本和兩個指向該版本的小型 XML 文件。(XML 文件示例如下。)

      如要創建指向現有可繪制對象的別名,請使用 元素。例如:

      @drawable/icon_ca

      如果將此文件保存為 drawables.xml(例如,在備用資源目錄中保存為 res/values-en-rCA/),則系統會將其編譯到可作為 R.drawable.icon 引用的資源中,但該文件實際是 R.drawable.icon_ca 資源(保存在 res/drawable/ 中)的別名。

      如要創建指向現有布局的別名,請使用包裝在 中的 元素。例如:

      如果將此文件保存為 main.xml,則系統會將其編譯到可作為 R.layout.main 引用的資源中,但該文件實際是 R.layout.main_ltr 資源的別名。

      如要創建指向現有字符串的別名,您只需將所需字符串的資源 ID 用作新字符串的值。例如:

      Hello @string/hello

      android應用資源概覽

      R.string.hi 資源現在是 R.string.hello 的別名。

      其他簡單值的原理相同。例如,顏色:

      #f00 @color/red

      訪問應用資源

      在應用中提供資源后,您可通過引用其資源 ID 來應用該資源。所有資源 ID 都在您項目的 R 類中進行定義,該類由 aapt 工具自動生成。

      編譯應用時,aapt 會生成 R 類,其中包含 res/ 目錄中所有資源的資源 ID。每個資源類型都有對應的 R 子類(例如,R.drawable 對應所有可繪制對象資源),而該類型的每個資源都有對應的靜態整型數(例如,R.drawable.icon)。該整型數就是可用來檢索資源的資源 ID。

      盡管資源 ID 是在 R 類中指定的,但您完全不需要在該類中查找資源 ID。資源 ID 始終由以下部分組成:

      資源類型:每個資源都被分到一個“類型”組中,例如 string、drawable 和 layout。如需了解有關不同類型的詳細信息,請參閱資源類型。

      資源名稱,它是不包括擴展名的文件名;或是 XML android:name 屬性中的值(如資源是字符串等簡單值)。

      訪問資源的方法有兩種:

      在代碼中:

      使用來自

      R

      類子類的靜態整型數,例如:

      R.string.hello

      string 為資源類型,hello 為資源名稱。當您提供此格式的資源 ID 時,有許多 Android API 可以訪問您的資源。請參閱在代碼中訪問資源。

      在 XML 中:

      使用同樣與

      R

      類中所定義資源 ID 對應的特殊 XML 語法,例如:

      @string/hello

      string 為資源類型,hello 為資源名稱。只要 XML 資源中的某處擁有您在資源中提供的值,則您便可在該 XML 資源中使用此語法。請參閱在 XML 中訪問資源。

      在代碼中訪問資源

      您可以以方法參數的形式傳遞資源 ID,進而在代碼中使用資源。例如,您可以設置一個 ImageView,從而借助 setImageResource() 使用 res/drawable/myimage.png 資源:

      val imageView = findViewById(R.id.myimageview) as ImageView imageView.setImageResource(R.drawable.myimage)

      您還可利用 Resources 中的方法檢索個別資源,并且您可通過 getResources() 獲得該資源的實例。

      以下是在代碼中引用資源的語法:

      [.]R..

      是資源所在包的名稱(如果引用的資源來自您自己的資源包,則不需要)。

      是資源類型的 R 子類。

      是不帶擴展名的資源文件名,或 XML 元素中的 android:name 屬性值(若資源是簡單值)。

      如需了解有關各資源類型及其引用方法的詳細信息,請參閱資源類型。

      許多方法可接受資源 ID 參數,您可利用 Resources 中的方法檢索資源。您可以通過 Context.getResources() 獲得 Resources 的實例。

      以下是一些在代碼中訪問資源的示例:

      // Load a background for the current screen from a drawable resource window.setBackgroundDrawableResource(R.drawable.my_background_image) // Set the Activity title by getting a string from the Resources object, because // this method requires a CharSequence rather than a resource ID window.setTitle(resources.getText(R.string.main_title)) // Load a custom layout for the current screen setContentView(R.layout.main_screen) // Set a slide in animation by getting an Animation from the Resources object flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.hyperspace_in)) // Set the text on a TextView object using a resource ID val msgTextView = findViewById(R.id.msg) as TextView msgTextView.setText(R.string.hello_message)

      **注意:**切勿手動修改 R.java 文件 — 在您編譯項目時,aapt 工具會生成該文件。下次編譯時,所有更改都會被覆蓋。

      在 XML 中訪問資源

      您可以使用對現有資源的引用,為某些 XML 屬性和元素定義值。創建布局文件時,為給您的微件提供字符串和圖像,您會經常這樣做。

      例如,如果您為布局添加 Button,則應為按鈕文本使用字符串資源:

      上一篇:制造業生產管理系統研發(生產制造系統的應用)
      下一篇:報表表格合并(怎樣合并報表)
      相關文章
      久久亚洲sm情趣捆绑调教 | jlzzjlzz亚洲乱熟在线播放| 亚洲精品美女久久久久| 亚洲国产精品免费视频| 在线观看亚洲成人| 精品亚洲视频在线观看| 成人婷婷网色偷偷亚洲男人的天堂| 亚洲最大天堂无码精品区| 中文字幕亚洲综合久久综合| 亚洲国产美女福利直播秀一区二区| 91亚洲国产成人久久精品网站| 亚洲AV综合色一区二区三区| 久久国产亚洲精品麻豆| 亚洲国产AV无码专区亚洲AV| 国产国拍亚洲精品mv在线观看| 亚洲av一综合av一区| 亚洲bt加勒比一区二区| 无码乱人伦一区二区亚洲| 91情国产l精品国产亚洲区| 亚洲黄色中文字幕| 亚洲国产成人久久三区| 亚洲人成77777在线观看网| 亚洲人成电影网站免费| 亚洲av无码专区首页| 亚洲高清国产拍精品青青草原| 亚洲美女高清一区二区三区| 国产偷国产偷亚洲高清日韩| 国产亚洲精品无码成人| 久久久亚洲欧洲日产国码农村| 久久av无码专区亚洲av桃花岛| 亚洲欧洲精品一区二区三区| 色偷偷女男人的天堂亚洲网| 亚洲人成未满十八禁网站| 久久精品亚洲日本波多野结衣| 成人伊人亚洲人综合网站222| 久久夜色精品国产亚洲av | 亚洲AV无码成人精品区在线观看 | 国产成人亚洲精品无码AV大片| 国产精品亚洲专区在线播放| 亚洲国产成人久久综合一区77| 亚洲综合最新无码专区|