Android Density (轉)

模擬器上和真機確實存在差距,上了開發板後,發現在模擬器上跑的好好的佈局都必須改變。

 


下面是轉載的一篇文章,收藏在此。http://blog.csdn.net/xieyan0811/archive/2010/06/18/5931561.aspx

1.          什麼是 density

1)         density
density
表示每英寸有多少個顯示點 ( 邏輯值 ) ,它的單位是 dpi dot per inch ,通常屏幕大時, density 就大,屏幕小時, density 就小,通常

屏幕實際分辨率爲 240px*400px 時, density=120
屏幕實際分辨率爲 320px*533px
density=160
屏幕實際分辨率爲 480px*800px density=240

2)         分辨率
是整個屏是多少點,比如 800x480 ,它是軟件的顯示單位

3)         Android1.6 版本開始支持 density( 對應 API Level 4)
用於解決應用在屏幕大小不同的硬件上正常顯示的問題

2.          相關代碼及設置

1)         AndroidManifest.xml


這個參數在
API Level 4 也就是 SDK 1.6 以後才啓用的,而且 1.6 版本的 API Level 4 的應用默認值就是 True

2)         資源目錄名( android 2.0 以後)
res/xxx-hdpi        
density 240 時,使用此目錄下的資源
res/xxx-mdpi       
density 160 時,使用此目錄下的資源
res/xxx-ldpi         
density 120 時,使用此目錄下的資源
res/xxx                
不常後綴,爲默認設置,同 xxx-mdpi

3)         資源單位( xml 文件中定義大小的單位)

a)        dp=dip=dx (Density independent pixel )
基於屏幕密度的抽象單位,設備無關的點,用於說明與密度無關的尺寸和位置。這些單位是相對於一個 160dpi 的屏幕,所有一個 dp 160dpi 屏幕上的一個點。

b)         px
px
指軟件的單位點,設備相關的點

c)          具體使用

                                       i.               佈局時儘量使用單位 dip ,少使用 px
若使用 px ,如果設某控件大小 400x400px ,在 800x480 上顯示正常,而在 533x320 的屏上就超出屏幕了

若使用 dp ,如果設某控件大小爲 160x160dp ,就可以通過從系統中取 density 來算出真正的大小,比如在 800x480 屏的 density 設爲 240 ,而 533x320 屏的 density 設爲 160 ,藉以下公式計算
pixels = dips * (density / 160)
800x480 在屏中顯示 240 象素,而在 533x320 的屏中顯示爲 160 象素,控件在屏中顯示的比例是一樣的。

                                      ii.               內部的處理過程分爲三步:
screen 中其它元素,轉爲應用的值,計算應用各控件位置,然後再轉成 800x480 以供真正顯示
res-xxx 不存在,則讀取 res 有的資源,然後對其做相應縮放

3.          實現 density 的關鍵源碼

1)         BitmapFactory.java (用於縮放圖片)

2)         ComptibilityInfo.java (用於位置計算)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章