支持多種屏幕
android運行在不同尺寸和像素(密度)的設備上,android系統給應用程序提供了一個相同的環境去適應不同的UI顯示界面。同時
系統提供API讓應用程序去控制UI在不同尺寸和密度的屏幕上的顯示效果,因為我們肯定不希望在手機和平板上顯示一樣的效果。
盡管android系統會自動縮放你的應用程序以適應不同分辨率,但是你也必須針對不同尺寸和密度的屏幕盡量優化,只有這樣才能最大程度上獲得
較好的用戶體驗。
概念
1.屏幕尺寸(Screen size):也就是我們常聽到的iphone4 3.5寸 iphone4s 4寸 samsung s2 4.3寸 HTC butterfly 5寸等等,也就是屏幕的對角線長度,
然後你可以根據屏幕的長寬比計算長寬的尺寸(android 將這些分為四個等級,分別是small, normal, large, 和 extra large)
2.像素密度(dpi):每英寸屏幕含有的像素點個數 (android 也按照像素密度分了四個等級,分別是low, medium, high, 和 extra high)
3.方向(Orientation) :分水平和垂直,如果應用做的好的話,這兩個方向都要考慮
4.分辨率(pix):也就是整個屏幕有多少個像素點組成,如果想應用程序支持不同的屏幕,那應用程序絕對不能直接根據分辨率作為單位來布局,而是應該
通過屏幕尺寸和像素密度中設定的等級來區分
5.像素無關密度(dp/dip): 一個android定義的虛擬的像素單位,你的應用程序應該用此單位來定義布局大小和位置
注意,一個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
)
(
如1920*1080 5寸屏,計算像素密度dpi = 根號[寬的平方 + 高的平方]/屏幕尺寸,
大概算一下是440dpi左右,也就是說你定義了一個button是100dp 寬,100dp高那麼實際就是100*440/160 = 275 pix 了,也就是說你這個button占據了www.2cto.com
屏幕的275/1920 + 275/1080
)
當然這兩款手機上的顯示效果還是有些差距的,計算了一下前者的button寬占據了整個屏幕寬度的0.1875 而後者的button寬占據了整個屏幕的0.1432
可以看出來前者占據的位置要大一些,這樣看起來在不同分辨率和大小的手機上效果就不太一樣了
其原因在於後者的分辨率比前者大很多,但是尺寸僅僅大了一寸,這也跟廠家的定位有關系吧,尺寸小其實是根本沒必要弄太大的分辨率的,因為根本看
不出效果來。
因此我們有必要對不同尺寸的定義不同的布局文件!!!
android 對不同尺寸不同像素密度等級劃分
實際尺寸 2 4 7 10
<-------------------------------------------------->
尺寸等級 small normal large 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 這樣就和在寸屏幕中所占的比例相同了