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