- Android 基礎
- Android - 首頁
- Android - 概覽
- Android - 環境設定
- Android - 架構
- Android - 應用元件
- Android - Hello World 示例
- Android - 資源
- Android - Activity
- Android - 服務
- Android - 廣播接收器
- Android - 內容提供器
- Android - Fragment
- Android - 意圖/過濾器
- Android - 使用者介面
- Android - UI 佈局
- Android - UI 控制元件
- Android - 事件處理
- Android - 樣式和主題
- Android - 自定義元件
- Android 高階概念
- Android - 拖放
- Android - 通知
- 基於位置的服務
- Android - 傳送郵件
- Android - 傳送簡訊
- Android - 電話呼叫
- 釋出 Android 應用
- Android 實用示例
- Android - 警報對話方塊
- Android - 動畫
- Android - 音訊捕獲
- Android - AudioManager
- Android - 自動完成
- Android - 最佳實踐
- Android - 藍牙
- Android - 相機
- Android - 剪貼簿
- Android - 自定義字型
- Android - 資料備份
- Android - 開發者工具
- Android - 模擬器
- Android - Facebook 整合
- Android - 手勢
- Android - Google 地圖
- Android - 影像效果
- Android - ImageSwitcher
- Android - 內部儲存
- Android - JetPlayer
- Android - JSON 解析器
- Android - Linkedin 整合
- Android - 載入動畫
- Android - 本地化
- Android - 登入介面
- Android - MediaPlayer
- Android - 多點觸控
- Android - 導航
- Android - 網路連線
- Android - NFC 指南
- Android - PHP/MySQL
- Android - 進度圓圈
- Android - 進度條
- Android - 推送通知
- Android - RenderScript
- Android - RSS 閱讀器
- Android - 螢幕錄製
- Android - SDK 管理器
- Android - 感測器
- Android - 會話管理
- Android - Shared Preferences
- Android - SIP 協議
- Android - 拼寫檢查器
- Android - SQLite 資料庫
- Android - 支援庫
- Android - 測試
- Android - 文字轉語音
- Android - TextureView
- Android - Twitter 整合
- Android - UI 設計
- Android - UI 模式
- Android - UI 測試
- Android - WebView 佈局
- Android - Wi-Fi
- Android - 小部件
- Android - XML 解析器
- Android 實用資源
- Android - 問題與解答
- Android - 實用資源
- Android - 討論
Android 資源組織與訪問
構建優秀的 Android 應用需要用到很多東西。除了編寫應用程式碼之外,還需要處理各種其他**資源**,例如程式碼使用的靜態內容,比如點陣圖、顏色、佈局定義、使用者介面字串、動畫指令等等。這些資源始終單獨儲存在專案**res/**目錄下的各個子目錄中。
本教程將講解如何組織應用資源、指定備用資源以及在應用中訪問它們。
在 Android Studio 中組織資源
MyProject/
app/
manifest/
AndroidManifest.xml
java/
MyActivity.java
res/
drawable/
icon.png
layout/
activity_main.xml
info.xml
values/
strings.xml
| 序號 | 目錄 & 資源型別 |
|---|---|
| 1 |
anim/ 定義屬性動畫的 XML 檔案。它們儲存在 res/anim/ 資料夾中,並透過**R.anim**類訪問。 |
| 2 |
color/ 定義顏色狀態列表的 XML 檔案。它們儲存在 res/color/ 中,並透過**R.color**類訪問。 |
| 3 |
drawable/ 影像檔案(如 .png、.jpg、.gif)或編譯成點陣圖、狀態列表、形狀、動畫 drawable 的 XML 檔案。它們儲存在 res/drawable/ 中,並透過**R.drawable**類訪問。 |
| 4 |
layout/ 定義使用者介面佈局的 XML 檔案。它們儲存在 res/layout/ 中,並透過**R.layout**類訪問。 |
| 5 |
menu/ 定義應用選單(如選項選單、上下文選單或子選單)的 XML 檔案。它們儲存在 res/menu/ 中,並透過**R.menu**類訪問。 |
| 6 |
raw/ 以原始形式儲存的任意檔案。需要使用資源 ID(即R.raw.filename)呼叫Resources.openRawResource()來開啟此類原始檔案。 |
| 7 |
values/ 包含簡單值的 XML 檔案,例如字串、整數和顏色。例如,以下是可以在此目錄中建立的資源的一些檔名約定:
|
| 8 |
xml/ 可以在執行時透過呼叫Resources.getXML()讀取的任意 XML 檔案。可以將各種配置檔案儲存在此處,並在執行時使用。 |
備用資源
應用應提供備用資源以支援特定的裝置配置。例如,應為不同的螢幕解析度包含備用 drawable 資源(即影像),併為不同的語言包含備用字串資源。在執行時,Android 會檢測當前裝置配置並載入適合應用的資源。
要為一組資源指定特定於配置的備用項,請執行以下步驟:
在 res/ 中建立一個新目錄,其名稱格式為<resources_name>-<config_qualifier>。其中resources_name將是上表中提到的任何資源,例如 layout、drawable 等。qualifier將指定將使用這些資源的單個配置。可以檢視官方文件以獲取不同型別資源的限定符完整列表。
將相應的備用資源儲存在此新目錄中。資原始檔必須與預設資原始檔完全同名,如下例所示,但這些檔案將包含特定於備用項的內容。例如,儘管影像檔名相同,但對於高解析度螢幕,其解析度將較高。
以下示例指定了預設螢幕的影像和高解析度螢幕的備用影像。
MyProject/
app/
manifest/
AndroidManifest.xml
java/
MyActivity.java
res/
drawable/
icon.png
background.png
drawable-hdpi/
icon.png
background.png
layout/
activity_main.xml
info.xml
values/
strings.xml
以下另一個示例指定了預設語言的佈局和阿拉伯語的備用佈局。
MyProject/
app/
manifest/
AndroidManifest.xml
java/
MyActivity.java
res/
drawable/
icon.png
background.png
drawable-hdpi/
icon.png
background.png
layout/
activity_main.xml
info.xml
layout-ar/
main.xml
values/
strings.xml
訪問資源
在應用開發過程中,需要在程式碼或佈局 XML 檔案中訪問定義的資源。以下部分說明如何在兩種情況下訪問資源:
在程式碼中訪問資源
編譯 Android 應用時,會生成一個R類,其中包含 res/目錄中所有可用資源的資源 ID。可以使用 R 類透過子目錄和資源名稱或直接使用資源 ID 來訪問該資源。
示例
要訪問res/drawable/myimage.png並設定 ImageView,將使用以下程式碼:
ImageView imageView = (ImageView) findViewById(R.id.myimageview); imageView.setImageResource(R.drawable.myimage);
此處,程式碼的第一行使用R.id.myimageview獲取在佈局檔案中定義的 ID 為myimageview的 ImageView。程式碼的第二行使用R.drawable.myimage獲取名為myimage的影像,該影像位於/res下的 drawable 子目錄中。
示例
考慮下一個示例,其中res/values/strings.xml具有以下定義:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello, World!</string> </resources>
現在,可以使用資源 ID 將 ID 為 msg 的 TextView 物件上的文字設定為如下所示:
TextView msgTextView = (TextView) findViewById(R.id.msg); msgTextView.setText(R.string.hello);
示例
考慮具有以下定義的佈局res/layout/activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView" />
<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button" />
</LinearLayout>
此應用程式碼將在 Activity 的 onCreate() 方法中載入此佈局,如下所示:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
在 XML 中訪問資源
考慮以下包含顏色資源和字串資源的資源 XML res/values/strings.xml檔案:
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="opaque_red">#f00</color> <string name="hello">Hello!</string> </resources>
現在,可以在以下佈局檔案中使用這些資源來設定文字顏色和文字字串,如下所示:
<?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/opaque_red" android:text="@string/hello" />
現在,如果再次回顧前面的章節,我解釋了Hello World!示例,我相信您將對本章中解釋的所有概念有更好的理解。因此,我強烈建議您檢視上一章以獲取工作示例,並檢查如何在最基本的級別上使用了各種資源。
