聲明:本文摘自 Google Android 開發者平台提供的官方文檔 Android應用資源概覽。
資源是指代碼使用的附加文件和靜態內容,例如位圖、布局定義、界面字符串、動畫說明等。
- 資源類型
目錄 | 資源類型 |
---|---|
animator/ |
用於定義屬性動畫的 XML 文件。 |
anim/ |
用於定義漸變動畫的 XML 文件。(屬性動畫也可保存在此目錄中,但為了區分這兩種類型,屬性動畫首選 animator/ 目錄。) |
color/ |
用於定義顏色狀態列表的 XML 文件。請參閱顏色狀態列表資源 |
drawable/ |
位圖文件(
請參閱 Drawable 資源。 |
mipmap/ |
適用於不同啟動器圖標密度的可繪制對象文件。如需了解有關使用 mipmap/ 文件夾管理啟動器圖標的詳細信息,請參閱管理項目概覽。 |
layout/ |
用於定義用戶界面布局的 XML 文件。請參閱布局資源。 |
menu/ |
用於定義應用菜單(如選項菜單、上下文菜單或子菜單)的 XML 文件。請參閱菜單資源。 |
raw/ |
需以原始形式保存的任意文件。如要使用原始 但是,如需訪問原始文件名和文件層次結構,則可以考慮將某些資源保存在 |
values/ |
包含字符串、整型數和顏色等簡單值的 XML 文件。 其他 由於每個資源均使用自己的 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" />