Android資源定義和使用


聲明:本文摘自 Google Android 開發者平台提供的官方文檔 Android應用資源概覽

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

  • 資源類型
目錄 資源類型
animator/ 用於定義屬性動畫的 XML 文件。
anim/ 用於定義漸變動畫的 XML 文件。(屬性動畫也可保存在此目錄中,但為了區分這兩種類型,屬性動畫首選 animator/ 目錄。)
color/ 用於定義顏色狀態列表的 XML 文件。請參閱顏色狀態列表資源
drawable/

位圖文件(.png.9.png.jpg.gif)或編譯為以下可繪制對象資源子類型的 XML 文件:

  • 位圖文件
  • 九宮格(可調整大小的位圖)
  • 狀態列表
  • 形狀
  • 動畫可繪制對象
  • 其他可繪制對象

請參閱 Drawable 資源

mipmap/ 適用於不同啟動器圖標密度的可繪制對象文件。如需了解有關使用 mipmap/ 文件夾管理啟動器圖標的詳細信息,請參閱管理項目概覽
layout/ 用於定義用戶界面布局的 XML 文件。請參閱布局資源
menu/ 用於定義應用菜單(如選項菜單、上下文菜單或子菜單)的 XML 文件。請參閱菜單資源
raw/

需以原始形式保存的任意文件。如要使用原始 InputStream 打開這些資源,請使用資源 ID(即 R.raw.filename)調用 Resources.openRawResource()

但是,如需訪問原始文件名和文件層次結構,則可以考慮將某些資源保存在 assets/ 目錄(而非 res/raw/)下。assets/ 中的文件沒有資源 ID,因此您只能使用 AssetManager 讀取這些文件。

values/

包含字符串、整型數和顏色等簡單值的 XML 文件。

其他 res/ 子目錄中的 XML 資源文件會根據 XML 文件名定義單個資源,而 values/ 目錄中的文件可描述多個資源。對於此目錄中的文件,<resources> 元素的每個子元素均會定義一個資源。例如,<string> 元素會創建 R.string 資源,<color> 元素會創建 R.color 資源。

由於每個資源均使用自己的 XML 元素進行定義,因此您可以隨意命名文件,並在某個文件中放入不同的資源類型。但是,您可能需要將獨特的資源類型放在不同的文件中,使其一目了然。例如,對於可在此目錄中創建的資源,下面給出了相應的文件名約定:

請參閱字符串資源樣式資源更多資源類型

xml/ 可在運行時通過調用 Resources.getXML() 讀取的任意 XML 文件。各種 XML 配置文件(如可搜索配置)都必須保存在此處。
font/ 帶有擴展名的字體文件(如 .ttf.otf 或 .ttc),或包含 <font-family> 元素的 XML 文件。如需詳細了解作為資源的字體,請參閱 XML 中的字體
  • 創建資源

例如創建字符串資源和顏色資源,可以在一個XML文件的 <resource></resource>中定義:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello</string>
    <string name="hi">@string/hello</string>
    <color name="red">#f00</color>
    <color name="hightlight">@color/red</color>
</resources>
可以為資源創建別名。上面資源 hi 就是 hello 的別名,highlight 是 red 的別名。
不同資源一般分開定義。可以創建一個strings.xml 和 colors.xml文件分別保存字符串和顏色這兩種資源。
strings.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello</string>
    <string name="hi">@string/hello</string>
</resources>

colors.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="red">#f00</color>
    <color name="highlight">@color/red</color>
</resources>
  • 訪問應用資源

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

訪問資源的方法有兩種:在代碼中訪問和在其他XML文件中訪問。

在代碼中訪問資源語法

[<package_name>.]R.<resource_type>.<resource_name>
  • <package_name> 是資源所在包的名稱(如果引用的資源來自您自己的資源包,則不需要)。
  • <resource_type> 是資源類型的 R 子類。
  • <resource_name> 是不帶擴展名的資源文件名,或 XML 元素中的 android:name 屬性值(若資源是簡單值)。

例如對於字符串資源 hello,使用 R.string.hello 訪問。

常見代碼中訪問資源用法:

// Load a background for the current screen from a drawable resource
getWindow().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
getWindow().setTitle(getResources().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
TextView msgTextView = (TextView) findViewById(R.id.msg);
msgTextView.setText(R.string.hello_message);

在XML文件中訪問資源語法

@[<package_name>:]<resource_type>/<resource_name>
  • <package_name> 是資源所在包的名稱(如果引用的資源來自相同資源包,則不需要)
  • <resource_type> 是資源類型的 R 子類
  • <resource_name> 是不帶擴展名的資源文件名,或 XML 元素中的 android:name 屬性值(若資源是簡單值)。

例如對於字符串資源 hello,使用 @string/hello 訪問。

在布局文件中訪問資源用法:

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:textColor="@color/red"
    android:text="@string/hello" />

如果要訪問系統資源,則要加上包名稱:

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:textColor="@android:color/secondary_text_dark"
    android:text="@string/hello" />


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM