鍍金池/ 教程/ Android/ Android 資源組織和訪問
Android 應用組件
使用布局文件自定義Android組件
Android通知
Android主題示例
Android JetPlayer實例
Android MediaPlayer(多媒體播放)
Android AbsoluteLayout
Android FrameLayout
Android Gestures/手勢
Android AutoCompleteTextView(自動完成)實例
Android 資源組織和訪問
Android ListView
Android GridView
Android數(shù)據(jù)備份
Android撥打電話
Android發(fā)送短信/SMS
Android ProgressDialog
SimpleCursorAdapter
Android發(fā)送電子郵件
Android Activity
Android TextView
Android事件處理
Android TableLayout
Android加載Spinner
Android內(nèi)容提供者
Android自定義字體
Android Service
Android CheckBox
Android Intent過濾器
Android LinearLayout
Android登錄實例
Android RadioButton
Android樣式和主題
Android自定義組件及屬性
Android UI控件
Android Animation(動畫)實例
Android Camera(攝像頭)
Android ToggleButton
Android Clipboard(復制/剪貼板)
Android音頻捕獲(錄音)
發(fā)布Android應用
Android Alertdialog(警告對話框)
Android圖片效果
Android內(nèi)部存儲
Android基于位置服務
Android RadioGroup
Android AutoCompleteTextView
Android Bluetooth(藍牙)實例
Android RelativeLayout
Android最佳實踐
Android本地化
Android自定義組件
Android教程
Android 架構
Android UI布局
Android Button
Android Hello World示例
Android音頻管理器實例
ArrayAdapter
Android拖放
Android碎片/片段
Android圖片切換
Android JSON解析器
Android開發(fā)環(huán)境搭建
Android Spinner
Android樣式示例
使用活動代碼自定義Android組件
Android ImageButton
Android EditText
Android廣播接收器

Android 資源組織和訪問

在許多Android項目中,有很多東西要用來建立一個良好的Android應用程序。除了編碼應用各種資源,如:位圖,顏色,布局定義,用戶界面字符串,動畫,靜態(tài)內(nèi)容。在res/目錄下,這些資源一直保持在各自子目錄。

這一小節(jié)將學習如何組織應用程序資源,指定替代資源,并在應用程序訪問它們。

組織資源

將每種類型的資源在一個特定項目的 res/目錄的子目錄。例如,這里有一個簡單的項目文件層次:

MyProject/
    src/  
        MyActivity.java  
    res/
        drawable/  
            icon.png  
        layout/  
            activity_main.xml
            info.xml
        values/  
            strings.xml  

 res/目錄中包含不同的子目錄的不同資源。在這里有一個圖像資源,兩個布局資源和一個字符串資源文件。下表給出了詳細的項目在 res/目錄里面支持的資源。

目錄 資源類型
anim/ 定義屬性的動畫XML文件。它們被保存在res/anim/文件夾,并從R.anim類訪問
color/ 定義的顏色狀態(tài)列表的XML文件。它們被保存在res/color/ ,并從R.color類訪問
drawable/ 像被編譯成位圖。.png, .jpg, .gif 或XML文件,狀態(tài)列表,圖形,動畫可繪制的圖像文件。它們被保存在res/drawable/,并可從R.drawable類訪問
layout/ 定義用戶界面布局的XML文件。它們被保存在res/layout/,并可從R.layout類訪問
menu/ 定義應用程序菜單,如選項菜單,上下文菜單或子菜單的XML文件。它們被保存在res/menu/,并可從R.menu類訪問
raw/ 任意文件保存在其原始形式。您需要callResources.openRawResource()與所述資源ID,即R.raw.filename來打開這樣的原始文件
values/ 包含簡單的值,如字符串,整數(shù)和顏色的XML文件。例如,這里有一些文件名約定資源,可以創(chuàng)建在該目錄中:
  • arrays.xml資源數(shù)組,并可從R.array類訪問

  • integers.xml資源整數(shù),并可從R.integerclass訪問

  • bools.xml資源布爾型,并可從R.bool類訪問

  • colors.xml為顏色值,并可從R.color類訪問

  • dimens.xml為維度值,并可從R.dimen類訪問

  • strings.xml為字符串值,并且可從R.string類訪問

  • styles.xml為樣式并可從R.style類訪問

xml/ 可以通過調(diào)用Resources.getXML()來讀取在運行時任意的XML文件。可以在這里保存各種配置文件,這些文件可在運行時使用

替代資源

應用程序提供替代資源以支持特定的設備配置。例如,包括替代繪制資源(ie.images),針對不同的語言不同的屏幕分辨率并替代字符串資源。在運行時Android 檢測當前設備的配置,并為應用程序加載適當?shù)馁Y源。

要指定一組資源的配置具體的替代,請遵循以下步驟:

  • 創(chuàng)建新目錄在res/ 目錄下,命名形式如 <resources_name>-<config_qualifier>。這里resources_name 是在上表中提到的資源,如layout,drawable 等限定符將指定一個單獨的配置,要使用這些資源。可以查看官方文檔的完整列表,限定符為不同類型的資源。

  • 在這個新的目錄中保存相應的替代資源。資源文件必須被命名為默認的資源文件,如下面的例子所示的完全一樣,但這些文件具有特定內(nèi)容的替代。例如,雖然圖像的文件名是相同的,但對高分辨率屏幕,其分辨率會很高。

下面是一個例子,它指定一個默認的屏幕和高分辨率屏幕的替代圖像的圖像。

MyProject/
    src/  
        MyActivity.java  
    res/
        drawable/  
            icon.png
            background.png
        drawable-hdpi/  
            icon.png
            background.png  
        layout/  
            activity_main.xml
            info.xml
        values/  
            strings.xml 

下面是另一個例子,指定一種默認語言為阿拉伯語并指定替代布局。

MyProject/
    src/  
        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 

訪問資源

在應用程序開發(fā)中,需要訪問定義的資源,無論是在代碼還是在布局XML文件。下面的部分介紹了如何訪問資源在這兩個場景:

訪問資源代碼

當Android應用程序被編譯時,會產(chǎn)生一個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定義布局文件。第二行代碼使用 R.drawable.myimage 得到的圖像名稱myimage ,在 /res子目錄下。

示例:

考慮在下一個例子 res/values/strings.xml 有以下定義:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string  name="hello">Hello, World!</string>
</resources>

現(xiàn)在,可以設置一個TextView對象msg 文字使用資源ID如下:

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>

這個應用程序代碼的一個活動將加載此布局,在onCreate()方法如下:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
}

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>

現(xiàn)在,可以利用這些資源,在下面的布局文件中設置文本顏色和文本字符串如下:

<?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" />

現(xiàn)在,如果將再次通過前面的章節(jié)了解,例如:Hello World!應用,將有助于更好的理解本小節(jié)介紹的概念。了解在前面的小節(jié)中是如何利用各種資源的基本操作。