android 佈局如何支持多種不一樣屏幕尺寸android
--關於dp、layout-xxx、drawable-xxx做用的小結iphone
轉載自:http://blog.csdn.net/vincent_blog/article/details/8547851佈局
支持多種屏幕
android運行在不一樣尺寸和像素(密度)的設備上,android系統給應用程序提供了一個相同的環境去適應不一樣的UI顯示界面。同時系統提供API讓應用程序去控制UI在不一樣尺寸和密度的屏幕上的顯示效果,由於咱們確定不但願在手機和平板上顯示同樣的效果。優化
儘管android系統會自動縮放你的應用程序以適應不一樣分辨率,可是你也必須針對不一樣尺寸和密度的屏幕儘可能優化,只有這樣才能最大程度上得到較好的用戶體驗。spa
概念.net
1.屏幕尺寸(Screen size):也就是咱們常聽到的iphone4 3.5寸 iphone4s 4寸 samsung s2 4.3寸 HTC butterfly 5寸等等,也就是屏幕的對角線長度,
而後你能夠根據屏幕的長寬比計算長寬的尺寸(android 將這些分爲四個等級,分別是small,normal, large, 和 extralarge)
2.像素密度(dpi):每英寸屏幕含有的像素點個數 (android 也按照像素密度分了四個等級,分別是low,medium, high, 和 extrahigh)
3.方向(Orientation):分水平和垂直,若是應用作的好的話,這兩個方向都要考慮
4.分辨率(pix):也就是整個屏幕有多少個像素點組成,若是想應用程序支持不一樣的屏幕,那應用程序絕對不能直接根據分辨率做爲單位來佈局,而是應該
經過屏幕尺寸和像素密度中設定的等級來區分
5.像素無關密度(dp/dip): 一個android定義的虛擬的像素單位,你的應用程序應該用此單位來定義佈局大小和位置orm
注意,一個dp和一個大小爲160dpi的屏幕中的一個像素是相等的,因此dp和pix的換算應該是這樣的real pix =dp * (dpi)/160
當你寫佈局文件的時候能夠根據這個公式大概估算一下
(如800*480 4寸屏,計算像素密度dpi = 根號[寬的平方 + 高的平方]/屏幕尺寸,
大概算一下是240dpi左右,也就是說你定義了一個button是100dp 寬,100dp高那麼實際就是100*240/160 = 150 pix 了,也就是說你這個button佔據了屏幕的150/800 +150/480 ,blog
如1920*1080 5寸屏,計算像素密度dpi = 根號[寬的平方 + 高的平方]/屏幕尺寸,大概算一下是440dpi左右,也就是說你定義了一個button是100dp 寬,100dp高那麼實際就是100*440/160 = 275 pix 了,也就是說你這個button佔據了屏幕的275/1920 +275/1080 。ip
固然這兩款手機上的顯示效果仍是有些差距的,計算了一下前者的button寬佔據了整個屏幕寬度的0.1875 然後者的button寬佔據了整個屏幕的0.1432。get
能夠看出來前者佔據的位置要大一些,這樣看起來在不一樣分辨率和大小的手機上效果就不太同樣了。其緣由在於後者的分辨率比前者大不少,可是尺寸僅僅大了一寸,這也跟廠家的定位有關係吧,尺寸小實際上是根本不必弄太大的分辨率的,由於根本看不出效果來。所以咱們有必要對不一樣尺寸的定義不一樣的佈局文件!!!
android 對不一樣尺寸不一樣像素密度等級劃分:
實際尺寸(尺寸等級) 2(small) 4(normal) 7(large) 10(xlarge)
實際像素密度 100 200 300
像素密度等級 ldpi(120) mdpi(160) hdpi(240) xhdpi(340)
好比上面的4寸和5寸應該定義兩個layout,layout定義button的長寬爲100dp,layout-large 定義button的長寬大概爲131dp ;
131*440/160 = 360 ,360/1920 = 0.1875 這樣就和在寸屏幕中所佔的比例相同了