Android資原始檔詳解
阿新 • • 發佈:2019-02-13
之前在介紹專案目錄結構時說到過Android程式的資原始檔,Android軟體是如何管理自己的資原始檔的呢?
首先資原始檔有那些型別,分為/res資料夾下預編譯的和/assets原生的檔案。
在res資料夾中會放些什麼東西呢?
/anim資料夾放置XML檔案的動畫檔案(它們會被編譯成逐幀動畫(frame by frame animation)或補間動畫
(tweened animation) 物件),這個暫時還接觸,不清楚。
/drawable資料夾下放置圖片資原始檔(png,jpg ,gif),可以通過Id獲得對應資源圖片Drawable物件。
類似的還有/raw資料夾下,放置了會直接複製到裝置中的任意檔案。它們無需編譯,新增到你的應用程式編譯產生的壓縮檔案中,可以通過 getRawResource()方法獲取。
/values資料夾下是可以被編譯成很多種型別的資源的XML檔案,儲存著一些常量。
通過/values-xxx的字尾設定,可以進行不同國家語言本地化設定,比如簡體中文放在/values-zh-rCN下
這個資料夾下的xml檔名可以自己設定,但有一些比較典型的檔案:
/xml資料夾當然下也是xml檔案,但是是需要用getXML()即時取讀使用的資訊值。
/menu選單檔案,xml文件,Android 中的選單分為選項選單、上下文選單和子選單,都可以在 XML檔案中宣告定義。通過R.menu.my_men
的方式來引用。典型選單資原始檔的結構:<menu> 根元素,在根元素裡會巢狀 <item> 和 <group> 子元素,<item> 元素中也可巢狀 <menu> 形成子選單。
/layout資料夾下放置的是屏幕布局資原始檔(xml格式),,關於佈局內容較多,接下來會具體介紹。
而在和/res資料夾同級的/ assets資料夾下也可以存放資原始檔但是這些資原始檔是不進行編譯加工的原生檔案,沒有標記好的資源id,使用時用AssetManager
以位元組流的形式讀取檔案。
1. 先在 Activity 裡面呼叫 getAssets() 來獲取 AssetManager 引用。
2. 再用 AssetManager 的 open(String fileName, int accessMode) 方法則指定讀取的檔案以及訪問模式就能得到輸入流 InputStream。
3. 然後就是用已經 open file 的 inputStream 讀取檔案,讀取完成後記得 inputStream.close()。
4. 呼叫 AssetManager.close() 關閉 AssetManager。
mm(毫米): 螢幕的物理尺寸。
ppi: pixel per inch,每英寸畫素數,該值越高,則螢幕越細膩 dpi: dot per inch,每英寸多少點,該值越高,則圖片越細膩 dp: dip,Density-independent pixel,與密度無關的象素,一種基於螢幕密度的抽象單位。 是安卓開發用的長度單位,1dp 表示在螢幕畫素點密度為 160ppi 時 1px 長度,也就是在每英寸160點的顯示器上,1dp=1px。 sp: scale-independent pixel,與刻度無關的象素,安卓開發用的字型大小單位best for textsize ) XML: android:textSize="@dimen/some_name" Java: float dimen = Resources.getDimen(R.dimen.some_name) 其他型別資源(strings,values等等)都類似。
array.xml 定義陣列 colors.xml 定義color drawable和顏色的字串值(color string values) dimens.xml 定義尺寸值(dimension value) strings.xml 定義字串(string)值 styles.xml 定義樣式(style)物件
所以關鍵來了,/res資料夾下的資原始檔最特別的就在於通過預編譯自動生成的R類擁有標記好的id,通過id即可獲取對應資源。在曾經的eclipse專案中還可以看到這個R類,但由於這個R類並不需要我們手動設定所以在Android-Studio工程目錄種並未顯示出來。
mm(毫米): 螢幕的物理尺寸。
ppi: pixel per inch,每英寸畫素數,該值越高,則螢幕越細膩 dpi: dot per inch,每英寸多少點,該值越高,則圖片越細膩 dp: dip,Density-independent pixel,與密度無關的象素,一種基於螢幕密度的抽象單位。 是安卓開發用的長度單位,1dp 表示在螢幕畫素點密度為 160ppi 時 1px 長度,也就是在每英寸160點的顯示器上,1dp=1px。 sp: scale-independent pixel,與刻度無關的象素,安卓開發用的字型大小單位best for textsize ) XML: android:textSize="@dimen/some_name" Java: float dimen = Resources.getDimen(R.dimen.some_name) 其他型別資源(strings,values等等)都類似。