編輯:關於android開發
目錄Directory
資源類型Resource Types
res/anim/
XML文件,它們被編譯進逐幀動畫(frame by frame animation)或補間動畫(tweened animation)對象
res/drawable/
res/drawable-hdpi/
res/drawable-ldpi/
res/drawable-mdpi/
res/drawable-xhdpi/
res/drawable-xxhdpi/
res/drawable-zh/
res/drawable-en-rUS-port-hdpi/
.png、.9.png、.jpg文件,它們被編譯進以下的Drawable資源子類型中:
要獲得這種類型的一個資源,可以使用Resource.getDrawable(id)
位圖文件
9-patches(可變尺寸的位圖)
為了獲取資源類型,使用mContext.getResources().getDrawable(R.drawable.imageId)
注意:放在這裡的圖像資源可能會被aapt工具自動地進行無損壓縮優化。比如,一個真彩色但並不需要256色的PNG可能會被轉換為一個帶調色板的8位PNG。這使得同等質量的圖片占用更少的資源。所以我們得意識到這些放在該目錄下的二進制圖像在生成時可能會發生變化。如果你想讀取一個圖像位流並轉換成一個位圖(bitmap),請把圖像文件放在res/raw/目錄下,這樣可以避免被自動優化。
drawable- hdpi、drawable- mdpi、drawable-ldpi的區別:
(1)drawable-hdpi裡面存放高分辨率的圖片,如WVGA (480x800),FWVGA (480x854)
(2)drawable-mdpi裡面存放中等分辨率的圖片,如HVGA (320x480)
(3)drawable-ldpi裡面存放低分辨率的圖片,如QVGA (240x320)
系統會根據機器的分辨率來分別到這幾個文件夾裡面去找對應的圖片。
在開發程序時為了兼容不同平台不同屏幕,建議各自文件夾根據需求均存放不同版本圖片。
Aphone一般到drawable-hdpi去取圖片,drawable-hdpi沒有圖片再到drawable-mdpi去取圖片,而後再到drawable-ldpi取圖片
Apad一般到drawable-mdpi去取圖片,drawable-hdpi沒有圖片再到drawable-ldpi去取圖片
橫屏含有drawable-land- hdpi、drawable-land- mdpi、drawable-land-ldpi的區別:
Aphone一般到drawable-land-hdpi去取圖片,drawable-land-hdpi沒有圖片再到drawable-land-mdpi去取圖片,而後再到drawable-land-ldpi取圖片,而後才會到drawable-hdpi去取圖片,drawable-hdpi沒有圖片再到drawable-mdpi去取圖片,而後再到drawable-ldpi取圖片
Apad一般到drawable-land-mdpi去取圖片,drawable-land-hdpi沒有圖片再到drawable-land-ldpi去取圖片,而後才會到drawable-mdpi去取圖片,drawable-hdpi沒有圖片再到drawable-ldpi去取圖片
-finger 用於觸摸屏的設備
-hdpi 近似於240dpi的高級顯示密度的屏幕
-mdpi 近似於160dpi的中級顯示密度的屏幕
-ldpi 近似於120dpi的低級顯示密度的屏幕
-land 橫屏顯示
-port 豎屏顯示
-long 比較長的屏幕,例如WQVGA(432×240), WVGA(800×480), FWVGA(854×480)
drawable-en:英文設置下的圖片資料,drawable-zh中文設置下的圖片資料。
若是要為不合像素的手機籌辦的話,須要(以drawable-en為例申明)
:drawable-en-hdpi
:drawable-en-ldpi
:drawable-en-mdpi
同理:為美式英語,
:drawable-en-rUS-hdpi
:drawable-en-rUS-ldpi
:drawable-en-rUS-mdpi
//豎屏
:drawable-en-rUS-port-hdpi
:drawable-en-rUS-port-ldpi
:drawable-en-rUS-port-mdpi
//橫屏
:drawable-en-rUS-land-hdpi
:drawable-en-rUS-land-ldpi
:drawable-en-rUS-land-mdpi
建樹這些文件夾是有次序的。即按優先級別分列的,見下表。所以建樹文件夾時一般從左到右的分列其優先級別如:drawable-en-rUS-land-mdpi
如:drawable-en-rUS-port-160dpi-finger-qwerty-dpad-480 x320/
res/layout/
res/layout-land/ res/layout-port/ res/layout-land-1024x720 / res/layout-port-976x768 / 如下目錄: layout layout-land layout-port layout-land-1024x720 //1024x768橫屏 layout-port-976x768 //1024x768豎屏 注意事項: 在android3.0之前版本,要適配指定的分辨率,需將layout文件夾定義成如下名稱: layout layout-1024x768 layout-1024x600 layout-1280x768 但是,在android3.0後,要適配如上的分辨率,需將高度減去48像素,即底部狀態欄的高度,android方可識別。針對以上分辨率,android4.0的layout文件夾應該定義為如下名稱: layout layout-1024x720 layout-1024x552 layout-1280x720 還有一種情況 如果是平板,有可能是豎屏的,需要是 layout layout-976x768 layout-976x600 layout-976x768格式如上。用法與正常的相同。手機會根據分辨率,自己找對應的布局,不用控制, 只需在res下按上述方式,新建對應layout就可以。 注意的是分辨率中大的數字必須寫到前面,否則會產生語法錯誤。 如layout-768x1024 的寫法是錯誤的。 注意格式,【layout】-【port/land】-【長度x寬度】 如何限定橫屏或者豎屏?
有些人討厭玩手機的時候橫豎屏來回的切換,有些應用也限定了應用程序只使用橫屏或者只使用豎屏,即使手機設置了“自動切換橫豎屏”。比如“水果忍者”是不能豎屏的(雙人模式除外了)
解決辦法:只需要在AndroidManifest.xml的Activity標簽中加入:android:screenOrientation="landscape"
android:screenOrientation="landscape"表示橫屏
或
android:screenOrientation="protrait"表示豎屏
這樣,所設定的應用程序就只能是橫屏或者豎屏了
res/values/
res/values-ldpi/
res/values-mdpi/
res/values-hdpi/
res/values-xhdpi/
res/values-nodpi/
res/values-nodpi-1024×600/
res/values-nodpi-1280×800/
res/values-nodpi-800×480/
res/values-en-rUS/
可以被編譯成很多種類型的資源的XML文件。
注意: 不像其他的res/文件夾,它可以保存任意數量的文件,這些文件保存了要創建資源的描述,而不是資源本身。XML元素類型控制這些資源應該放在R類的什麼地方。
盡管這個文件夾裡的文件可以任意命名,不過下面使一些比較典型的文件(文件命名的慣例是將元素類型包含在該名稱之中):
array.xml 定義數組
colors.xml 定義color drawable和顏色的字符串值(color string values)。使用Resource.getDrawable()和Resources.getColor()分別獲得這些資源。
dimens.xml定義尺寸值(dimension value)。使用Resources.getDimension()獲得這些資源。
strings.xml定義字符串(string)值。使用Resources.getString()或者Resources.getText()獲取這些資源。getText()會保留在UI字符串上應用的豐富的文本樣式。
styles.xml 定義樣式(style)對象。
以添加一個 英語(美國):values-en-rUS 為例
1、把下面左列表中的Region添加到左邊的列表裡面,並在Region輸入框裡輸入us
2、這時,上面的消息提示:如果用Region的話,需要使用語言項,和Region一樣,我們把Language也添加到右面的列表裡面,填入en
3、點擊Finish按鈕,資源文件就會建好了,目錄:/res/values-en-rUS(其實上面一大堆操作,就是為生成這個目錄)
android多國語言文件夾文件匯總如下:
Arabic, Egypt (ar_EG) -----------------------------阿拉伯語,埃及
Arabic, Israel (ar_IL) -------------------------------阿拉伯語,以色列
Bulgarian, Bulgaria (bg_BG) ---------------------保加利亞語,保加利亞
Catalan, Spain (ca_ES) ---------------------------加泰隆語,西班牙
Czech, Czech Republic (cs_CZ) -----------------捷克語,捷克共和國
Danish, Denmark(da_DK) ------------------------丹麥語,丹麥
German, Austria (de_AT) -------------------------德語,奧地利
German, Switzerland (de_CH) -------------------德語,瑞士
German, Germany (de_DE) ----------------------德語,德國
German, Liechtenstein (de_LI) ------------------德語,列支敦士登的
Greek, Greece (el_GR) ----------------------------希臘語,希臘
English, Australia (en_AU) -------------------------英語,澳大利亞
English, Canada (en_CA) --------------------------英語,加拿大
English, Britain (en_GB) ----------------------------英語,英國
English, Ireland (en_IE) -----------------------------英語,愛爾蘭
English, India (en_IN) --------------------------------英語,印度
English, New Zealand (en_NZ) ---------------------英語,新西蘭
English, Singapore(en_SG) --------------------------英語,新加坡
English, US (en_US) -----------------------------------英語,美國
English, Zimbabwe (en_ZA) --------------------------英語,津巴布韋
Spanish (es_ES) ----------------------------------------西班牙
Spanish, US (es_US) -----------------------------------西班牙語,美國
Finnish, Finland (fi_FI) ---------------------------------芬蘭語,芬蘭
French, Belgium (fr_BE) -------------------------------法語,比利時
French, Canada (fr_CA) -------------------------------法語,加拿大
French, Switzerland (fr_CH) --------------------------法語,瑞士
French, France (fr_FR) --------------------------------法語,法國
Hebrew, Israel (he_IL) ---------------------------------希伯來語,以色列
Hindi, India (hi_IN) -------------------------------------印地語,印度
Croatian, Croatia (hr_HR) ----------------------------克羅地亞語,克羅地亞
Hungarian, Hungary (hu_HU) ------------------------匈牙利語,匈牙利
Indonesian, Indonesia (id_ID) ------------------------印尼語,印尼
Italian, Switzerland (it_CH) ----------------------------意大利語,瑞士
Italian, Italy (it_IT) ---------------------------------------意大利語,意大利
Japanese (ja_JP) ----------------------------------------日語
Korean (ko_KR) ------------------------------------------朝鮮語
Lithuanian, Lithuania (lt_LT) --------------------------立陶宛語,立陶宛
Latvian, Latvia (lv_LV) ---------------------------------拉托維亞語,拉托維亞
Norwegian-Bokmol, Norway(nb_NO) ---------------挪威語,挪威
Dutch, Belgium (nl_BE) --------------------------------荷蘭語,比利時
Dutch, Netherlands (nl_NL) ---------------------------荷蘭語,荷蘭
Polish (pl_PL) -------------------------------------------波蘭
Portuguese, Brazil (pt_BR) ---------------------------葡萄牙語,巴西
Portuguese, Portugal (pt_PT) ------------------------葡萄牙語,葡萄牙
Romanian, Romania (ro_RO) ------------------------羅馬尼亞語,羅馬尼亞
Russian (ru_RU) ----------------------------------------俄語
Slovak, Slovakia (sk_SK) ------------------------------斯洛伐克語,斯洛伐克
Slovenian, Slovenia (sl_SI) ---------------------------斯洛文尼亞語,斯洛文尼亞
Serbian (sr_RS) ----------------------------------------塞爾維亞語
Swedish, Sweden (sv_SE) ----------------------------瑞典語,瑞典
Thai, Thailand (th_TH) --------------------------------泰語,泰國
Tagalog, Philippines (tl_PH) --------------------------菲律賓語,菲律賓
Turkish, Turkey (tr_TR) -------------------------------土耳其語,土耳其
Ukrainian, Ukraine (uk_UA) --------------------------聯合王國
Vietnamese, Vietnam (vi_VN) -----------------------越南語,越南
Chinese, PRC (zh_CN)--------------------------------中文,中國
Chinese, Taiwan (zh_TW)-----------------------------中文,台灣
res/xml/
任意的XML文件,在運行時可以通過調用Resources.getXML()讀取。
res/raw/
直接復制到設備中的任意文件。它們無需編譯,添加到你的應用程序編譯產生的壓縮文件中。要使用這些資源,可以調用Resources.openRawResource(),參數是資源的ID,即R.raw.somefilename。
需要注意的是,來自Resources和Assets 中的文件只可以讀取而不能進行寫的操作
以下為從Raw文件中讀取:
代碼
public String getFromRaw(){
try {
InputStreamReader inputReader = new InputStreamReader( getResources().openRawResource(R.raw.test1));
BufferedReader bufReader = new BufferedReader(inputReader);
String line="";
String Result="";
while((line = bufReader.readLine()) != null)
Result += line;
return Result;
} catch (Exception e) {
e.printStackTrace();
}
}
以下為直接從assets讀取
代碼
public String getFromAssets(String fileName){
try {
InputStreamReader inputReader = new InputStreamReader( getResources().getAssets().open(fileName) );
BufferedReader bufReader = new BufferedReader(inputReader);
String line="";
String Result="";
while((line = bufReader.readLine()) != null)
Result += line;
return Result;
} catch (Exception e) {
e.printStackTrace();
}
}
當然如果你要得到內存流的話也可以直接返回內存流!
res/raw和assets的相同點:
1.兩者目錄下的文件在打包後會原封不動的保存在apk包中,不會被編譯成二進制。
*res/raw和assets的不同點:
1.res/raw中的文件會被映射到R.java文件中,訪問的時候直接使用資源ID即R.id.filename;assets文件夾下的文件不會被映射到R.java中,訪問的時候需要AssetManager類。
2.res/raw不可以有目錄結構,而assets則可以有目錄結構,也就是assets目錄下可以再建立文件夾
Android中AlarmManager使用示例(持續更新,已經更改),alarmmanager現在普遍的手機都會有一個鬧鐘的功能,如果使用Android來實現一個鬧鐘可
Android實用工具類-GrallyAndPhotoUtils圖片處理工具 目錄 目錄 概述 前言 拍照 創建存儲拍照圖片的文件 調用系統拍照程序 讀取相
Android M Launcher3主流程源碼淺析 背景 關於Launcher是啥的問題我想這裡就沒必要再強調了。由於一些原因迫使最近開始需要研究一下Launcher3
Android安全專項-利用androguard分析微信 安裝 做 Android 安全測試之前你應該知道的工具 (一) 分析 ./androlyze.py -s進入