標籤:
一、R檔案是什嗎?
如所示,我們可以通過findViewById方法通過傳入R.id.show找到我們的TextView元素,findViewById方法也很好理解,從View中通過Id找到,那麼R是什麼呢?
資源檔的使用分為在代碼中使用和在其他資源檔中引用該資源檔。在我們編譯一個Android應用時,Android會自動產生一個R類,在該類中根據不同的資源類型又產生了相應的內部類,該類包含了系統中使用到的所有資源檔的標示,在Android Studio編譯環境下,R檔案在“D:\UsersFiles\AndroidStudioProjects\MyFirstApp\app\build\generated\source\r\debug\com\example\boyliupan\myfirstapp”目錄下(本項目),其中“D:\UsersFiles\AndroidStudioProjects”是我自己定義的工作空間的路徑,“MyFirstApp”是我建立的項目名稱。
在查詢的網路資料和書中
提示R.Java檔案儲存體在“/ge/<package name>”目錄下,但是我在Android Studio的編譯結果中並沒有找到這一項。
我們開啟R.java,看一下裡面的內容:
其中第1-6行是系統自動產生的注釋,說明這是AAPT工具通過它找到的資源資料自動產生的檔案,它不能被手動修改(因為你修改了也沒用,每次重建都會被覆蓋)。
AAPT也就是Android Asset Packaging Tool,即Android資源打包工具,通常都是由IDE自動調用,我們不需要手動去使用。
第8-39行就是AAPT自動產生的程式碼了,該類的名字就是R,其下定義了一些常量。我們可以把R.java理解成資源字典,記錄著所有可使用資源的Id,
通過這些Id,我們就可以很方便的在程式中使用這些資源了。
AAPT工具產生R.java檔案的規則主要是如下兩條:
1.每類資源對對應於R類的一個內部類。比如所有字串資源對應一個string內部類,所有布局類資源對應於layout內部類。
2.每個具體的資源向對應於內部類的一個public static final int類型的欄位,比如我們在樣本中定義了show的標識符,我們就可以通過R.Id.show找到。
二、Res目錄說明
Res目錄存放了Android應用所用的全部資源,包括圖片資源、字串資源、顏色資源等等。其中包含多個目錄(這裡只說明一部分):
A).其中drawable檔案夾用於儲存.png、.9.png、.jpg等圖片資源(.9.png是Android特有的圖片格式,可以根據情況進行展開,達到不變形的效果),他們的分變率從高到低,如果你打算在android應用中包含一個圖片或者表徵圖,就應該把它們放在這個目錄。
B)layout檔案夾存放的是應用程式的布局檔案,這些layout是以xml形式儲存的。
C)values 這個目錄也包含了一些xml檔案,但主要是應用中要引用的key-value對。這些XML檔案聲明了數組(Array)、顏色(color)、度量(Dimension)、字串。之所以把這些東西分別放在單獨的xml檔案中主要是考慮到這些值能夠在不更改原始碼的情況下用於多語言環境。例如,根據使用者語言的不同應用程式中的資訊可以有多種語言版本。
Res目錄下的資源與R.JAVA的關係
開發人員只要編輯Res目錄下的資源,R.JAVA根據Res內容完全自動產生,為每個資源分派一個ID,編程時可以通過ID來調用,下面我們會說使用方式。
我們知道資源的使用分為在java代碼中使用和在XML檔案中引用,下面我們分這兩種情況說明一下如何使用:
1.在java代碼中使用
這個很簡單,我們在前面的例子中已經使用過,直接調用R.id.資源ID就可以調用到(這裡示範的是標識符下的資源,如果是字串資源,就是R.string.資源ID,請自行理解)
2.在XML檔案中引用
在XML檔案中引用,我們只需要要照著“@<資源對應內部類類名>/<資源項名稱>”來訪問即可,比如string資源下預設定義了一個app_name的資源我們就可以這樣調用“@string/app_name”
3.例外
當我們在XML中使用標識符時,這些標識符不需要使用專門的資源進行定義,我們直接使用“@id/<標識符代號>”來分配標識符即可。
目錄資源的訪問:
res目錄資源通過Resources的相應方法來訪問。
相關的資訊可以這樣擷取:
三、AndroidManifest.xml說明
資訊清單檔:這個XML檔案包含了android應用中的元資訊,是每個android項目中的重要檔案。在軟體安裝的時候被讀取 ,Android中的四大組件(Activity、ContentProvider、BroadcastReceiver、Service)都需要在該檔案中,以及運行這個android應用程式需要的使用者權限列表,例如:電話、簡訊、互連網、訪問SD卡,同時也詳細描述了android應用的項目結構。通過可以包含如下資訊:
1.應用程式的包名,該包名將會作為該應用的唯一標識。
2.應用中所包含的組件,如Activity,Services等等。
3.應用程式相容的最低版本
4.應用程式使用系統所需的許可權聲明
5.其它程式訪問該應用所需的許可權聲明
下面是我們樣本的資訊清單檔,灰色字型是說明:
四、應用許可權的說明及使用
Android應用想要調用某些系統的功能就必須具有相應的許可權才可以,比如我們想調用GPS模組,這時我們就必須擁有使用GPS的許可權;我們的應用也可能被其他應用調用,這時候也需要聲明調用我們的應用需要的許可權。
1.運行該應用需要的許可權
只需要在資訊清單檔的<manifest../>元素中添加<uses-permission…/>子項目即可。例如:
2.調用我們的應用所需要的許可權
聲明方法和上述一致,只是聲明的位置要放在具體的組件元素節點下。
Android的SDK提供了大量的許可權,這些許可權都位於Manifest.permission類中,我們常用的許可權如下:
| 許可權 |
說明 |
| ACCESS_NETWORK_STATE |
允許應用程式擷取網路狀態 |
| ACCESS_WIFI_STATE |
運行應用程式擷取WIFI狀態 |
| BATTERY_STATS |
允許應用程式擷取電池狀態 |
| BLUETOOTH |
允許應用程式串連藍芽 |
| BLUETOOTH_ADMIN |
允許應用程式發現藍芽 |
| BROADCAST_SMS |
允許應用程式廣播收到簡訊提醒 |
| CALL_PHONE |
允許應用程式使用撥號功能 |
| CAMERA |
允許應用程式使用網路攝影機 |
| CHANGE_NETWORK_STATE |
允許應用程式改變網路狀態 |
| CHANGE_WIFI_STATE |
允許應用程式改變WIFI狀態 |
| DELETE_CACHE_FILES |
允許應用程式刪除快取檔案 |
| FLASHLIGHT |
允許應用程式使用閃光燈 |
| INTERNET |
允許應用程式開啟網路Socket |
| MODIFY_AUDIO_SETTINGS |
允許應用程式修改全域聲音設定 |
| PROCESS_OUTGOING_CALLS |
允許應用程式監聽、控制、取消呼出電話 |
| DELETE_PACKAGES |
允許應用程式刪除安裝包 |
| READ_CONTACTS |
允許應用程式讀取連絡人 |
| READ_HISTORY_BOOKMARKS |
允許應用程式讀取曆史書籤 |
| READ_OWNER_DATA |
允許應用程式讀取使用者資料 |
| READ_PHONE_STATE |
允許應用程式讀取手機狀態 |
| READ_PHONE_SMS |
允許應用程式讀取簡訊 |
| REBOOT |
允許應用程式重啟手機 |
| RECEIVE_MMS |
允許應用程式接收、監控、處理多媒體訊息 |
| RECEIVE_SMS |
允許應用程式接收、監控、處理簡訊 |
| RECORD_AUDIO |
允許應用程式使用錄音 |
| SEND_SMS |
允許應用程式傳送簡訊 |
| SET_ORIENTATION |
允許應用程式旋轉螢幕 |
| SET_TIME |
允許應用程式設定時間 |
| SET_TIME_ZONE |
允許應用程式設定時區 |
| SET_WALLPAPER |
允許應用程式設定壁紙 |
| VIBRATE |
允許應用程式控制震動器 |
| WRITE_CONTACTS |
允許應用程式寫入連絡人 |
| WRITE_HISTORY_BOOKMARKS |
允許應用程式寫入曆史書籤 |
| WRITE_OWNER_DATA |
允許應用程式寫入使用者資料 |
| WRITE_SMS |
允許應用程式寫簡訊 |
| 。。。。 |
。。。。。 |
表格取自《瘋狂android講義》後續會做補充完善
五、結語&下篇預告
最近買了一本《瘋狂Android講義》第三版,看了前幾章,不得不說,作者很有思想,安排的內容循序漸進,很多內容講的淺顯易懂,讀了深有感觸,這個系列的文章為讀書筆記,會有一些內容參考書中的內容,我認為寫的比較實用的地方會總結出來,會有借用部分,向作者致敬,希望有志學習Android開發的同學可以買一本學習學習。
下一篇會簡單介紹一下Android開發中常用的組件,概念性的東西,介紹完以後新的篇章會開始Android開發中各個UI組件的學習。
Android開發自學筆記(Android Studio1.3.1)—3.Android應用結構解析