萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 安卓開發 >> Android設備分辨率,密度以及dp

Android設備分辨率,密度以及dp

  為解決Android設備碎片化,引入一個概念density,也就是密度.它指的是在一定尺寸的物理屏幕上顯示像素的數量,一般使用dpi(dots per inch,每英寸像素數)作為單

  位.比如設備分辨率為240x320,屏幕物理尺寸為1.5英寸x2英寸(對角線為2.5)它的密度可以用分辨率/尺寸表示:240/1.5或者即320/2,密度為160dpi。算對角線也是一樣

  的,長的平方+寬的平方=160000,開方後=400.可知400/2.5=160.對於用戶來說,密度越大的屏幕顯示效果越精細,因為每英寸顯示的像素數量更多。

  以上的描述就是一個藍本(此藍本對應於mdpi).

  按照此藍本一個dp相當於160dpi屏幕中的一個px.同理在,在320dpi的屏幕中,一個dp相當於2個px.

  通過這樣的成比例放縮,Android解決了需要多個不同屏幕中的大小顯示問題.

  所以在Eclipse的布局文件中,以3.7in WVGA(Nexus One)(480x800)為例,可以看見其為sw320dp,h533dp.

  即寬有320dp,高為533dp.

  是怎麼計算出來的呢?

  將(480的平方+800的平方)開方=932.9523031

  然後932.9523031/屏幕尺寸3.7=252.14927,此結果為此手機的屏幕密度.

  然後按照上面的藍本,就應該要計算在該手機上1dp對於多少px.計算如下:

  160 1dp=1px

  252.14927 1dp=?px

  結果為:

  252.14927/160=1.5759329

  注意:

  在此一般不取1.5759329,只取到1.5即可.

  所以:480/1.5=320;800/1.5=533.3333(通常取為533),即上述的sw320dp,h533dp.

  手機屏幕密度的對應關系

  120上下浮動的都屬於ldpi

  160上下浮動的都屬於mdpi

  240上下浮動的都屬於hdpi

  320上下浮動的都屬於xdpi

  以摩托羅拉ME525+(3.7英寸 分辨率854x480像素)為例:

  將(480的平方+854的平方)開方=979.6509

  然後979.6509/屏幕尺寸3.7=264.770529,此結果為此手機的屏幕密度.對應為hdpi

  264.770529/160=1.6548

  即在此手機中1dp=1.6548個像素,只取到1.6即可

  所以:480/1.6=300;854/1.6=533.75(通常取為533)

  按照這個邏輯,算出來的寬應該是只有300dp.悲劇的是,如果某個控件的寬為300,在此手機上是不能鋪滿手機的寬的.

  也就是說除以的不是1.6而還是1.5!!!!所以將寬設置為320即可

  總結:在hdpi中,像素轉換為dp統一用的是:像素/1.5

  以聯想K860(5.0英寸,分辨率1280x720像素)為例:

  將(1280的平方+720的平方)開方=1468.60478

  然後1468.60478/屏幕尺寸5=293.720,此結果為此手機的屏幕密度.對應為xdpi

  293.720/160=1.8357

  即在此手機中1dp=1.8357個像素

  所以:1280/1.8357=697.281;720/1.8357=392.22

  按照這個邏輯,算出來的寬應該是392.22.悲劇的是,如果某個控件的寬為392.22,在此手機上是顯示不完全的.

  也就是說除以的不是1.8而是2!!!!所以將寬設置為360即可

  總結:在xdpi中,像素轉換為dp統一用的是:像素/2

  注意問題1:

  在建立模擬器的時候注意

  854x480在Hardware中,應該將Abstracted LCD density設置為240,並手動輸入分辨率

  1280x720在Hardware中,應該將Abstracted LCD density設置為320,並手動輸入分辨率

  注意問題2:

  多個layout文件夾在命名上有相應規則,以分辨率480x854為例,需要建立480x854像素的layout文件夾,命名:layout-854x480,有兩點需要注意:①大數(854)必須在前,

  否則會報錯;②兩個數字之間的符號是小寫英文字母“x”,不是乘號

copyright © 萬盛學電腦網 all rights reserved