天天看點

Android SDK上手指南:應用程式資源

版權聲明:本文為部落客原創文章,轉載請标明出處。 https://blog.csdn.net/chaoyu168/article/details/52996942

介紹

在系列教程中的最新一篇裡,我們将研究大家最可能在第一個開發項目中涉及到的資源類型。項目資源當中包含布局、圖檔以及資料值,這些都是應用需要使用的元素。當我們建立一個新項目時,項目目錄下會自動生成多個用于容納通用資源類型的檔案夾。如果需要,大家還可以添加更多檔案夾以擴充資源類型數量。

大家可以通過Package Explorer浏覽“res”檔案夾當中的内容,這些就是我們之前在建立項目時所使用的資源。打開檔案夾、看看裡面都藏着哪些寶貝。大家還可以在資源目錄下添加更多新檔案夾,也可以在各檔案夾中添加新檔案,或者是直接使用現有檔案(例如我們在前幾篇系列文章中所使用的布局與字元值檔案)。

1. 備用資源

在我們正式開始之前,首先指出一點注意事項——大家可以将自己的Android資源劃分為兩大類:一種是能夠被跨裝置使用的資源,另一種則是針對裝置特定子集的資源。大家可以在現有項目結構中發現二者的執行個體。在Eclipse Package Explorer當中,檢視“res”目錄。請記住,不同的可繪制檔案夾對應着特定裝置螢幕像素密度。在今天的文章中,我們打算使用非特定可繪制檔案(即能夠跨裝置使用的資源)。

大家可以通過類别限定的方式為每種資源類型添加備用目錄。在Eclipse當中,這代表着“drawable-hdpi”、“drawable-xhdpi”等不同類型。Android平台支援多種使用者裝置分類方式,其中包括螢幕尺寸、像素密度、API級别、語言以及區域等等。任何在名稱中不包含類型限定的資源類型檔案夾都能夠實作跨裝置使用。大家并不一定需要為所有資源類型都設定類别限定檔案夾,但當我們針對不同裝置進行應用測試時,可能需要在不同配置之間做出一些細微調整。

2. 可繪制資源

第一步

我們都知道,Eclipse會建立多個可繪制檔案夾,每一個都針對一種特定的密度桶。可繪制檔案夾當中包含我們在應用程式中所使用的任何圖檔。大家可以在Eclipse之外準備一些數字格式的圖檔,例如JPEG、PNG以及GIF。大家還可以利用XML代碼定義可繪制資源。下面我們就着手嘗試,并将其添加到主布局當中。

盡管大家應該嘗試針對各種特定像素密度建立可繪制資源,但由于本教程的篇幅所限,今天我們姑且使用适應所有裝置的單一可繪制方案。在Eclipse Package Explorer當中選擇“res”檔案夾,選擇“File”或者右鍵點選該檔案夾->選擇“New”->“Folder”來建立一個新檔案夾。将該檔案夾命名為“drawable”然後點選“Finish”完成建立。

無論何時,隻要我們需要在項目當中建立新檔案夾,都可以遵循以上流程。

第二步

現在我們建立的可繪制檔案夾應該已經與其它原有可繪制檔案夾一道,顯示在Package Explorer當中了。正如我們之前所提到,如果某個檔案夾并不針對特定裝置子集(即由像素密度分類或者API級别加以定義),那麼大家完全可以随意置換其中的資源并将其用于任何使用者裝置。是以,無論我們向新的可繪制檔案夾當中添加什麼内容,其都會顯示在所有使用者裝置之上。對于大部分可繪制資源來說,我們最需要注意的就是其不同像素密度版本;不過為了簡單起見,我們将在今天的文章中使用這個新檔案夾。

在Package Explorer當中選中我們的建立可繪制檔案夾、右鍵點選或者選擇“File”、而後選擇“New”以及“Android XML File”,進而在檔案夾中建立一個新檔案。這時Eclipse會彈出新檔案的建立導航。Android支援多種不同的可繪制檔案類型。今天我們要建立的是一個圖形可繪制檔案,并利用其中所包含的不同圖形及外觀實作标記的目的。大家可以點選此處,通過開發者指南了解其它可繪制類型。

在頂部的下拉清單中,我們可以選擇資源的具體類型——由于我們是在可繪制檔案夾中建立新檔案的,是以Eclipse會自動選中“drawable”。接下來是項目下拉清單,同時應該自動填入我們所選擇的項目。然後是在文本輸入框内為檔案命名——輸入“nice_shape.xml”。輸入框下方是我們可以選擇的根元素清單。下滾并選擇“shape”,因為我們打算定義的是圖形可繪制資源。最後點選“Finish”,Eclipse會建立新檔案并在編輯器中打開。

第三步

在圖形可繪制對象中,大家可以選擇一系列通用圖形類别,其中包括矩形、橢圓、線條和圓環。選擇了圖形類别之後,我們就可以對其具體屬性加以定義,例如實心或者漸變顔色、邊角、填充、尺寸以及筆觸等。我們通過以下代碼編輯根shape元素,進而獲得一個矩形:

  1.  <shape xmlns:android="http://schemas.android.com/apk/res/android" 
  2.     android:shape="rectangle" > 
  3. </shape> 

大家接下來可以通過在根shape元素中添加其它元素來定義圖形屬性。首先定義一個梯度:

  1. <shape xmlns:android="http://schemas.android.com/apk/res/android" 
  2.     android:shape="rectangle" > 
  3.     <gradient 
  4.         android:angle="270" 
  5.         android:centerColor="#FFFFFF00" 
  6.         android:endColor="#FF0000FF" 
  7.         android:startColor="#FFFF0000" 
  8.         android:type="linear" /> 
  9. </shape> 

我們需要定義梯度的類型、角度外加起點、終點以及中央的顔色。在gradient元素完成後,我們再添加一些圓角:

  1. <corners android:radius="10dp" /> 

下面添加筆觸:

  1. <stroke 
  2.    android:width="2dp" 
  3.    android:color="#FF339966" /> 

當我們在編輯器中輸入内容時,會看到Eclipse提示的可用元素與屬性類型。在完成本教程之後,大家可以用一段時間來嘗試它們對效果的影響。我們将在下一步驟中将建立好的圖形用在UI當中。現在儲存可繪制檔案。

提示:要在應用程式内使用Eclipse之外所準備的數字圖檔檔案,大家隻需直接将其複制到工作區目錄下對應的可繪制檔案夾當中即可。在檔案向資源檔案夾的複制過程結束後,大家可能需要重新整理Eclipse視圖——即在Package Explorer中選擇對應項目,右皺起擊或者選擇“File”,然後選擇“Refresh”。這樣我們就能在應用程式代碼中引用這些圖檔檔案了。

3. 布局資源

第一步

我們先回顧一下之前文章在設計應用程式使用者界面時,其中所涉及的布局知識。先來看布局檔案與可繪制互動。我們可以在布局當中将可繪制資源作為View或者特定View的背景加以顯示。首先列出我們已經建立完成的圖形可繪制資源,并将其作為現有View的背景。打開應用程式的主布局檔案,将圖形可繪制資源作為我們之前添加的按鈕的背景圖案。為Button元素添加以下屬性:

  1. android:background="@drawable/nice_shape" 

我們利用資源類型與名稱(即我們為可繪制資源設定的檔案名)将其引用到布局當中。請注意,這與我們之前用于引用字元串值的文法形式是一樣的。儲存并切換到Graphical Layout标簽,檢視圖形是否已經成為按鈕背景。大家可能會注意到,按鈕還需要一點填充調整。現在切換回XML編輯模式并為Button元素添加填充屬性:

  1. android:padding="5dp" 

重新切換回Graphical Layout标簽并檢視實際效果。

第二步

現在讓我們在專用View中使用圖形可繪制資源。将以下代碼添加到布局中的Button元素内:

  1. <ImageView 
  2.   android:layout_width="fill_parent" 
  3.   android:layout_height="fill_parent" 
  4.   android:layout_margin="10dp" 
  5.   android:src="@drawable/nice_shape" /> 

我們設定ImageView來填滿除了邊界之外的空間。大家也可以選擇為其設定固定長度與寬度來達到同樣的效果。請注意,Eclipse會顯示警告,因為我們還沒有為其添加内容描述屬性。現在開始着手進行,打開我們的“res/values”字元串XML檔案并添加以下内容:

  1. <string name="pic">Picture</string> 

現在大家可以将該字元串添加到布局檔案下的ImageView當中:

  1. android:contentDescription="@string/pic" 

如大家所見,資源的使用需要在項目中的不同檔案之間來回切換,同時使用标準文法模式實作對不同資源條目的引用。現在再次切換以檢視圖形預覽效果。

大家可以使用圖中所示的控件進行放大與縮小。

4. 其它資源類型

到目前為止,我們已經在應用程式當中使用了三種資源類型:布局、可繪制與值。其實可以在應用中使用的資源類型還有很多,隻需通過前面介紹的方法加以引用即可。正如我們在本系列之前的文章中所提到,大家還可以利用以下文法引用Java檔案中的資源:

  1. //R.type.name 
  2. .string.pic//example 

讓我們簡要總結一下将來可能會用在應用程式當中的其它資源類型。在之前的文章和本文的前面幾個章節,我們已經使用了可繪制與布局資源。字元串值也出現在布局檔案當中。現在在Package Explorer當中打開“values”檔案夾,除了字元串檔案之外,Eclipse通常還會添加一個尺寸檔案和一個樣式檔案。在樣式檔案内,大家可以定義外觀屬性進而與應用程式的UI風格保持一緻。而在“dimens”檔案中,大家可以定義應用程式所使用的尺寸值。

如我們之前所提到,大家可以通過限定機制為特定裝置屬性建立備用資源類型檔案夾。如大家所見,Eclipse會針對特定API級别建立值檔案夾,但我們也可以利用其它一些限定手段實作對特定裝置的支援。舉例來說,大家可能希望在我們所添加的ImageView當中使用固定寬高尺寸,進而使顯示大小與裝置螢幕尺寸完美契合。為了實作這一點,大家可以添加值檔案夾及其中的尺寸檔案來比對各種尺寸或者像素密度桶(例如‘-small’、‘-large’、‘-hdpi’、‘-mdpi’等等)。通過在每個檔案當中包含尺寸值,并在相同的值名稱之下使用不同數字,Android系統将自動選擇最适合使用者裝置的方案。

大家可能需要用到的其它資源類型還包括數字、菜單、動畫以及顔色值。Eclipse通常會在我們建立一個應用程式之後為其建立一個菜單檔案夾,現在請大家打開該檔案夾看看其中的内容。要定義XML動畫,大家可以向“res”目錄中添加一個“anim”或者“animator”檔案夾,也可以直接将動畫檔案添加到可繪制檔案夾當中——具體方式取決于我們所使用的實際動畫類型。

如果大家希望在應用程式UI中使用一組顔色,則可以在儲存于值目錄下的檔案中對color元素進行定義。每個color元素都可以包含一個HEX值與一個名稱屬性,這樣我們就可以在其它檔案當中引用這些顔色了。至于那些無法被歸于任何一種Android定義類别的XML資源,大家可以将其儲存在“res”目錄下的“xml”檔案夾當中。

要對Android當中的全部資源類型擁有透徹了解,大家可以檢視開發者指南當中的“資源類型”與“更多資源類型”兩個章節。雖然在學習的起步階段最好隻接觸比較淺顯的内容,但這些資料仍然值得大家認真閱讀,進而為今後的開發工作奠定良好的知識基礎。

提示:當大家參閱Android項目執行個體或者開發者指南時,經常會在其中發現一些經常被資源使用的标準檔案名。不過檔案名本身其實可以随意選擇——隻要大家使用正确的檔案夾名稱與元素,這樣應用程式代碼就可以通過識别系統通路所有資源。除此之外,堅持使用傳統檔案名可以讓我們的應用程式更加清晰且便于了解,特别是對于值檔案夾來說。

總結

在今天的文章中,我們了解了Android系統當中關于應用程式資源的基礎知識。不過正如之前所提到,還有很多未知領域等等着我們去探索。對于大家的第一款應用,各位隻需要使用相對簡單的方案幫助自己習慣資源的使用方法即可。但随着我們在應用開發方面的不斷成長,大家應該嘗試思考各類使用者裝置在運作我們應用時可能面臨的情況,并為其提供必要的額外資源。在本系列教程的下一部分中,我們将一同了解項目的Manifest(清單)檔案。

繼續閱讀