Android SDK上手指南:應(yīng)用程序資源
譯文介紹
在系列教程中的最新一篇里,我們將研究大家最可能在第一個開發(fā)項(xiàng)目中涉及到的資源類型。項(xiàng)目資源當(dāng)中包含布局、圖片以及數(shù)據(jù)值,這些都是應(yīng)用需要使用的元素。當(dāng)我們創(chuàng)建一個新項(xiàng)目時,項(xiàng)目目錄下會自動生成多個用于容納通用資源類型的文件夾。如果需要,大家還可以添加更多文件夾以擴(kuò)展資源類型數(shù)量。
大家可以通過Package Explorer瀏覽“res”文件夾當(dāng)中的內(nèi)容,這些就是我們之前在創(chuàng)建項(xiàng)目時所使用的資源。打開文件夾、看看里面都藏著哪些寶貝。大家還可以在資源目錄下添加更多新文件夾,也可以在各文件夾中添加新文件,或者是直接使用現(xiàn)有文件(例如我們在前幾篇系列文章中所使用的布局與字符值文件)。
1. 備用資源
在我們正式開始之前,首先指出一點(diǎn)注意事項(xiàng)——大家可以將自己的Android資源劃分為兩大類:一種是能夠被跨設(shè)備使用的資源,另一種則是針對設(shè)備特定子集的資源。大家可以在現(xiàn)有項(xiàng)目結(jié)構(gòu)中發(fā)現(xiàn)二者的實(shí)例。在Eclipse Package Explorer當(dāng)中,查看“res”目錄。請記住,不同的可繪制文件夾對應(yīng)著特定設(shè)備屏幕像素密度。在今天的文章中,我們打算使用非特定可繪制文件(即能夠跨設(shè)備使用的資源)。
大家可以通過類別限定的方式為每種資源類型添加備用目錄。在Eclipse當(dāng)中,這代表著“drawable-hdpi”、“drawable-xhdpi”等不同類型。Android平臺支持多種用戶設(shè)備分類方式,其中包括屏幕尺寸、像素密度、API級別、語言以及區(qū)域等等。任何在名稱中不包含類型限定的資源類型文件夾都能夠?qū)崿F(xiàn)跨設(shè)備使用。大家并不一定需要為所有資源類型都設(shè)置類別限定文件夾,但當(dāng)我們針對不同設(shè)備進(jìn)行應(yīng)用測試時,可能需要在不同配置之間做出一些細(xì)微調(diào)整。
2. 可繪制資源
第一步
我們都知道,Eclipse會創(chuàng)建多個可繪制文件夾,每一個都針對一種特定的密度桶。可繪制文件夾當(dāng)中包含我們在應(yīng)用程序中所使用的任何圖片。大家可以在Eclipse之外準(zhǔn)備一些數(shù)字格式的圖片,例如JPEG、PNG以及GIF。大家還可以利用XML代碼定義可繪制資源。下面我們就著手嘗試,并將其添加到主布局當(dāng)中。
盡管大家應(yīng)該嘗試針對各種特定像素密度創(chuàng)建可繪制資源,但由于本教程的篇幅所限,今天我們姑且使用適應(yīng)所有設(shè)備的單一可繪制方案。在Eclipse Package Explorer當(dāng)中選擇“res”文件夾,選擇“File”或者右鍵點(diǎn)擊該文件夾->選擇“New”->“Folder”來創(chuàng)建一個新文件夾。將該文件夾命名為“drawable”然后點(diǎn)擊“Finish”完成創(chuàng)建。
無論何時,只要我們需要在項(xiàng)目當(dāng)中創(chuàng)建新文件夾,都可以遵循以上流程。
第二步
現(xiàn)在我們新建的可繪制文件夾應(yīng)該已經(jīng)與其它原有可繪制文件夾一道,顯示在Package Explorer當(dāng)中了。正如我們之前所提到,如果某個文件夾并不針對特定設(shè)備子集(即由像素密度分類或者API級別加以定義),那么大家完全可以隨意置換其中的資源并將其用于任何用戶設(shè)備。因此,無論我們向新的可繪制文件夾當(dāng)中添加什么內(nèi)容,其都會顯示在所有用戶設(shè)備之上。對于大部分可繪制資源來說,我們最需要注意的就是其不同像素密度版本;不過為了簡單起見,我們將在今天的文章中使用這個新文件夾。
在Package Explorer當(dāng)中選中我們的新建可繪制文件夾、右鍵點(diǎn)擊或者選擇“File”、而后選擇“New”以及“Android XML File”,從而在文件夾中創(chuàng)建一個新文件。這時Eclipse會彈出新文件的創(chuàng)建導(dǎo)航。Android支持多種不同的可繪制文件類型。今天我們要創(chuàng)建的是一個圖形可繪制文件,并利用其中所包含的不同圖形及外觀實(shí)現(xiàn)標(biāo)記的目的。大家可以點(diǎn)擊此處,通過開發(fā)者指南了解其它可繪制類型。
在頂部的下拉列表中,我們可以選擇資源的具體類型——由于我們是在可繪制文件夾中創(chuàng)建新文件的,所以Eclipse會自動選中“drawable”。接下來是項(xiàng)目下拉列表,同時應(yīng)該自動填入我們所選擇的項(xiàng)目。然后是在文本輸入框內(nèi)為文件命名——輸入“nice_shape.xml”。輸入框下方是我們可以選擇的根元素列表。下滾并選擇“shape”,因?yàn)槲覀兇蛩愣x的是圖形可繪制資源。最后點(diǎn)擊“Finish”,Eclipse會創(chuàng)建新文件并在編輯器中打開。
第三步
在圖形可繪制對象中,大家可以選擇一系列通用圖形類別,其中包括矩形、橢圓、線條和圓環(huán)。選擇了圖形類別之后,我們就可以對其具體屬性加以定義,例如實(shí)心或者漸變顏色、邊角、填充、尺寸以及筆觸等。我們通過以下代碼編輯根shape元素,從而獲得一個矩形:
- <shape xmlns:android="http://schemas.android.com/apk/res/android"
- android:shape="rectangle" >
- </shape>
大家接下來可以通過在根shape元素中添加其它元素來定義圖形屬性。首先定義一個梯度:
- <shape xmlns:android="http://schemas.android.com/apk/res/android"
- android:shape="rectangle" >
- <gradient
- android:angle="270"
- android:centerColor="#FFFFFF00"
- android:endColor="#FF0000FF"
- android:startColor="#FFFF0000"
- android:type="linear" />
- </shape>
我們需要定義梯度的類型、角度外加起點(diǎn)、終點(diǎn)以及中央的顏色。在gradient元素完成后,我們再添加一些圓角:
- <corners android:radius="10dp" />
下面添加筆觸:
- <stroke
- android:width="2dp"
- android:color="#FF339966" />
當(dāng)我們在編輯器中輸入內(nèi)容時,會看到Eclipse提示的可用元素與屬性類型。在完成本教程之后,大家可以用一段時間來嘗試它們對效果的影響。我們將在下一步驟中將創(chuàng)建好的圖形用在UI當(dāng)中。現(xiàn)在保存可繪制文件。
提示:要在應(yīng)用程序內(nèi)使用Eclipse之外所準(zhǔn)備的數(shù)字圖片文件,大家只需直接將其復(fù)制到工作區(qū)目錄下對應(yīng)的可繪制文件夾當(dāng)中即可。在文件向資源文件夾的復(fù)制過程結(jié)束后,大家可能需要刷新Eclipse視圖——即在Package Explorer中選擇對應(yīng)項(xiàng)目,右皺起擊或者選擇“File”,然后選擇“Refresh”。這樣我們就能在應(yīng)用程序代碼中引用這些圖片文件了。
3. 布局資源
第一步
我們先回顧一下之前文章在設(shè)計(jì)應(yīng)用程序用戶界面時,其中所涉及的布局知識。先來看布局文件與可繪制交互。我們可以在布局當(dāng)中將可繪制資源作為View或者特定View的背景加以顯示。首先列出我們已經(jīng)創(chuàng)建完成的圖形可繪制資源,并將其作為現(xiàn)有View的背景。打開應(yīng)用程序的主布局文件,將圖形可繪制資源作為我們之前添加的按鈕的背景圖案。為Button元素添加以下屬性:
- android:background="@drawable/nice_shape"
我們利用資源類型與名稱(即我們?yōu)榭衫L制資源設(shè)定的文件名)將其引用到布局當(dāng)中。請注意,這與我們之前用于引用字符串值的語法形式是一樣的。保存并切換到Graphical Layout標(biāo)簽,查看圖形是否已經(jīng)成為按鈕背景。大家可能會注意到,按鈕還需要一點(diǎn)填充調(diào)整。現(xiàn)在切換回XML編輯模式并為Button元素添加填充屬性:
- android:padding="5dp"
重新切換回Graphical Layout標(biāo)簽并查看實(shí)際效果。
第二步
現(xiàn)在讓我們在專用View中使用圖形可繪制資源。將以下代碼添加到布局中的Button元素內(nèi):
- <ImageView
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:layout_margin="10dp"
- android:src="@drawable/nice_shape" />
我們設(shè)置ImageView來填滿除了邊界之外的空間。大家也可以選擇為其設(shè)置固定長度與寬度來達(dá)到同樣的效果。請注意,Eclipse會顯示警告,因?yàn)槲覀冞€沒有為其添加內(nèi)容描述屬性。現(xiàn)在開始著手進(jìn)行,打開我們的“res/values”字符串XML文件并添加以下內(nèi)容:
- <string name="pic">Picture</string>
現(xiàn)在大家可以將該字符串添加到布局文件下的ImageView當(dāng)中:
- android:contentDescription="@string/pic"
如大家所見,資源的使用需要在項(xiàng)目中的不同文件之間來回切換,同時使用標(biāo)準(zhǔn)語法模式實(shí)現(xiàn)對不同資源條目的引用。現(xiàn)在再次切換以查看圖形預(yù)覽效果。
大家可以使用圖中所示的控件進(jìn)行放大與縮小。
4. 其它資源類型
到目前為止,我們已經(jīng)在應(yīng)用程序當(dāng)中使用了三種資源類型:布局、可繪制與值。其實(shí)可以在應(yīng)用中使用的資源類型還有很多,只需通過前面介紹的方法加以引用即可。正如我們在本系列之前的文章中所提到,大家還可以利用以下語法引用Java文件中的資源:
- //R.type.name
- .string.pic//example
讓我們簡要總結(jié)一下將來可能會用在應(yīng)用程序當(dāng)中的其它資源類型。在之前的文章和本文的前面幾個章節(jié),我們已經(jīng)使用了可繪制與布局資源。字符串值也出現(xiàn)在布局文件當(dāng)中。現(xiàn)在在Package Explorer當(dāng)中打開“values”文件夾,除了字符串文件之外,Eclipse通常還會添加一個尺寸文件和一個樣式文件。在樣式文件內(nèi),大家可以定義外觀屬性從而與應(yīng)用程序的UI風(fēng)格保持一致。而在“dimens”文件中,大家可以定義應(yīng)用程序所使用的尺寸值。
如我們之前所提到,大家可以通過限定機(jī)制為特定設(shè)備屬性創(chuàng)建備用資源類型文件夾。如大家所見,Eclipse會針對特定API級別創(chuàng)建值文件夾,但我們也可以利用其它一些限定手段實(shí)現(xiàn)對特定設(shè)備的支持。舉例來說,大家可能希望在我們所添加的ImageView當(dāng)中使用固定寬高尺寸,從而使顯示大小與設(shè)備屏幕尺寸完美契合。為了實(shí)現(xiàn)這一點(diǎn),大家可以添加值文件夾及其中的尺寸文件來匹配各種尺寸或者像素密度桶(例如‘-small’、‘-large’、‘-hdpi’、‘-mdpi’等等)。通過在每個文件當(dāng)中包含尺寸值,并在相同的值名稱之下使用不同數(shù)字,Android系統(tǒng)將自動選擇最適合用戶設(shè)備的方案。
大家可能需要用到的其它資源類型還包括數(shù)字、菜單、動畫以及顏色值。Eclipse通常會在我們創(chuàng)建一個應(yīng)用程序之后為其創(chuàng)建一個菜單文件夾,現(xiàn)在請大家打開該文件夾看看其中的內(nèi)容。要定義XML動畫,大家可以向“res”目錄中添加一個“anim”或者“animator”文件夾,也可以直接將動畫文件添加到可繪制文件夾當(dāng)中——具體方式取決于我們所使用的實(shí)際動畫類型。
如果大家希望在應(yīng)用程序UI中使用一組顏色,則可以在保存于值目錄下的文件中對color元素進(jìn)行定義。每個color元素都可以包含一個HEX值與一個名稱屬性,這樣我們就可以在其它文件當(dāng)中引用這些顏色了。至于那些無法被歸于任何一種Android定義類別的XML資源,大家可以將其保存在“res”目錄下的“xml”文件夾當(dāng)中。
要對Android當(dāng)中的全部資源類型擁有透徹了解,大家可以查看開發(fā)者指南當(dāng)中的“資源類型”與“更多資源類型”兩個章節(jié)。雖然在學(xué)習(xí)的起步階段最好只接觸比較淺顯的內(nèi)容,但這些資料仍然值得大家認(rèn)真閱讀,從而為今后的開發(fā)工作奠定良好的知識基礎(chǔ)。
提示:當(dāng)大家參閱Android項(xiàng)目實(shí)例或者開發(fā)者指南時,經(jīng)常會在其中發(fā)現(xiàn)一些經(jīng)常被資源使用的標(biāo)準(zhǔn)文件名。不過文件名本身其實(shí)可以隨意選擇——只要大家使用正確的文件夾名稱與元素,這樣應(yīng)用程序代碼就可以通過識別系統(tǒng)訪問所有資源。除此之外,堅(jiān)持使用傳統(tǒng)文件名可以讓我們的應(yīng)用程序更加清晰且便于理解,特別是對于值文件夾來說。
總結(jié)
在今天的文章中,我們了解了Android系統(tǒng)當(dāng)中關(guān)于應(yīng)用程序資源的基礎(chǔ)知識。不過正如之前所提到,還有很多未知領(lǐng)域等等著我們?nèi)ヌ剿鳌τ诖蠹业牡谝豢顟?yīng)用,各位只需要使用相對簡單的方案幫助自己習(xí)慣資源的使用方法即可。但隨著我們在應(yīng)用開發(fā)方面的不斷成長,大家應(yīng)該嘗試思考各類用戶設(shè)備在運(yùn)行我們應(yīng)用時可能面臨的情況,并為其提供必要的額外資源。在本系列教程的下一部分中,我們將一同了解項(xiàng)目的Manifest(清單)文件。
原文鏈接: http://mobile.tutsplus.com/tutorials/android/android-sdk-app-resources/