一、基本概念android
屏幕大小(screen size) —— 屏幕的實際大小,用屏幕對角線長度來衡量(好比3.4寸,3.8寸)。android把屏幕分爲如下4種:small,normal,large,extra large佈局
屏幕密度(Screen Density) —— 一塊實際的屏幕區域有多少個像素,通常用dpi衡量(每英寸有多少個點)。相比起medium、high屏幕密度的設備,在一塊肯定大小的屏幕區域l密度爲low的屏幕擁有的像素更少。android把屏幕密度分爲4種:low,medium,high,extra high。測試
方向(orientation) —— 屏幕方向分爲landscape(橫屏)和portrait(豎屏)。ui
分辨率(Resolution) ——屏幕上的總實際像素數。對屏幕進行適配時,通常不關注它的分辨率,只關注它的屏幕大小和密度。spa
與密度無關的像素(Density-independent pixel,dp或dip) —— 爲了保證你的UI適合不一樣的屏幕密度,建議你採用dp來定義程序UI。orm
如何分辨一個屏幕是ldpi、mdpi、hdpi的方法,見下圖:blog
二、怎樣適配多種屏幕圖片
a.在manifest裏定義你的程序支持的屏幕類型,相應代碼以下:
<supports-screens android:resizeable=["true"| "false"]
android:smallScreens=["true" | "false"] //是否支持小屏
android:normalScreens=["true" | "false"] //是否支持中屏
android:largeScreens=["true" | "false"] //是否支持大屏
android:xlargeScreens=["true" | "false"] //是否支持超大屏
android:anyDensity=["true" | "false"] //是否支持多種不一樣密度的屏幕
android:requiresSmallestWidthDp=」integer」
android:compatibleWidthLimitDp=」integer」
android:largestWidthLimitDp=」integer」/>ip
b.對不一樣大小的屏幕提供不一樣的layout。開發
好比,若是須要對大小爲large的屏幕提供支持,須要在res目錄下新建一個文件夾layout-large/並提供layout。固然,也能夠在res目錄下創建layout-port和layout-land兩個目錄,裏面分別放置豎屏和橫屏兩種佈局文件,以適應對橫屏豎屏自動切換。
c.對不一樣密度的屏幕提供不一樣的圖片。
應儘可能使用點9格式的圖片,如需對密度爲low的屏幕提供合適的圖片,需新建文件夾drawable-ldpi/,並放入合適大小的圖片。相應的,medium對應drawable-mdpi /,high對應drawable-hdpi/,extra high對應drawable-xhdpi/。
圖片大小的肯定:low:medium:high:extra high比例爲3:4:6:8。舉例來講,對於中等密度(medium)的屏幕你的圖片像素大小爲48×48,那麼低密度(low)屏幕的圖片大小應爲36×36,高(high)的爲72×72,extra high爲96×96。
三、多屏幕適配的4條黃金原則
a.在layout文件中設置控件尺寸時應採用wrap_content,fill_parent和dp。
具體來講,設置view的屬性android:layout_width和android:layout_height的值時,wrap_content,fill_parent或dp比pix更好。相應地,爲了使文字大小更好的適應屏幕應該使用sp來定義文字大小。
b.在程序的代碼中不要出現具體的像素值。
爲了使代碼簡單,android內部使用pix爲單位表示控件的尺寸,但這是基於當前屏幕基礎上的。爲了適應多種屏幕,android建議開發者不要使用具體的像素來表示控件尺寸。
c.不要使用AbsoluteLayout(android1.5已廢棄) 。相應地,應使用RelativeLayout。
d.對不一樣的屏幕提供合適大小的圖片。見上面第2部分。
四、須要注意的地方
以上設置適用於android3.2如下的版本。(本人目前開發是在android2.2上,這部分之後再補充)
五、怎樣測試你的程序是否支持多屏幕適配,通常使用AVD Manager建立多個不一樣大小的模擬器。