天天看點

Android中px和dip的差別

 在Android手機的誕生之初,由于Android系統是開源的,一開始便有衆多的OEM廠商對Android手機進行深度定制,于是乎Android手機的皮膚和螢幕大小都變得百花齊放,這可苦逼了我們這群開發者,因為我們被要求要注意寫出一個好的Android軟體,寫一次代碼就能适應大小不同的螢幕。這就好比,你做了一套衣服,要讓不同身材的人都穿得合身,類似于生活中的道理,我們這套衣服肯定不能用沒有彈性的布料,是以我們要像生活中那種無尺碼,有彈性的衣服學習,在代碼裡面盡量讓界面能夠自動适應螢幕的大小,幸好Android作業系統提供了一些這方面的螢幕适應機制。

       螢幕上的圖案最終就是由一個個的點構成的,也就是說我們最終要控制的就是怎麼合理地拉伸螢幕上的點,以便讓界面合理地鋪到界面上,好像專門為了使用者手中的這塊螢幕開發的一樣,android中的界面顯示機關主要有px,dp(dip),sp等,下面我們将簡單地介紹它們并提出在什麼場合使用。

幾乎是一條定律:

Android中px和dip的差別

圖1.設定相同的px,界面元素在不同的螢幕密度下的表現

    從圖1中,我們可以看出,當螢幕的尺寸(用英寸來表示)相同時,在不同螢幕密度(density)下,用等大的像素來表示的時候,在低螢幕密度的螢幕上顯示得比較大(如上圖中的左側圖檔),在高螢幕密度的螢幕上顯示得比較小(如上圖中的右側圖檔)。

Android中px和dip的差別

圖2.設定相同的dip,界面元素在不同的螢幕密度下的表現

     從圖2中,可以看出,在螢幕的尺寸相同時,而螢幕的密度不同是,界面元素在鋪在界面上的比例相同。這是因為圖2中界面元素的顯示機關用的是dip,它能夠根據螢幕密度自動調整界面元素的大小,讓界面元素以恰當的比例顯示在螢幕上。

注意:當兩塊螢幕的長和寬可以用相同的dip來表示的話,那麼界面元素能夠按照螢幕密度自動拉伸到恰當的大小,但是如果兩塊螢幕的長寬不能用相同的dip元素來表示的話,那麼界面雖然會根據螢幕密度拉伸,但是拉伸的比例也不會正确。因為根據dip、螢幕密度進行拉伸的原理,其實是長或寬的dip數乘以螢幕密度進而得到正确的像素(pixels),因為最終要顯示到螢幕上的時候,必須要将界面顯示的機關落實到像素(pixels)上,隻是Android系統自動幫我們完成了這個轉換的工作。

dp(或dip)的全稱是Density-independent Pixels(密度獨立像素) 。dp是一個抽象機關,建立在螢幕的實體密度上。這些機關都是相對于一個160 dpi(dots per inch 每英寸擁有的點數)螢幕,上面1 dp幾乎等于1 px。當運作在更高密度的螢幕上,原先描繪1dp的像素需要根據一個合适的比例擴大到一定的數量,以便适合螢幕的dpi。同樣,當在一個低密度螢幕,用來顯示1dp的像素需要按比例縮小一定的數量。dp轉化成pixe的比率會随着螢幕的密度改變,但不一定成正比。使用dp機關(而不是px)是一個簡單的解決方案,使得在你的布局(LayOut)中界面元素的大小,能根據不同的螢幕密度調整到适當的大小。換句話說,它提供了在不同的裝置中,UI元素實際大小的一緻性。

Pixels(像素)——對應于實際的像素在螢幕上。這個機關是不建議使用的,因為界面可能需要顯示在多個裝置中,每個裝置可能有不同螢幕密度和螢幕上所有像素的數量可能更多或者更少。

當螢幕的長寬用dip表示時,長寬都是相同的話,那麼就可以使用dip進行界面元素的大小的布局,Android會自動幫我們拉伸到合适的尺寸,但是,如果螢幕差異太大的話,那麼用dip進行布局大小的限定還是會出現問題的。

<a href="http://files.cnblogs.com/kissazi2/testdb.zip" target="_blank">示例代碼</a>

<a href="http://developer.android.com/guide/practices/screens_support.html">Supporting Multiple Screens</a>

<a href="http://www.cnblogs.com/over140/archive/2012/09/26/2611999.html">Android實用代碼七段(一)</a>

<a href="http://www.oschina.net/question/234345_40079">Android螢幕密度(Density)和分辨率的關系</a>

<a href="http://erbo2008.iteye.com/blog/1149788">Android Density(密度)</a>

<a href="http://developer.android.com/guide/topics/resources/more-resources.html#Dimension">Dimension</a>

<a href="http://stackoverflow.com/questions/2025282/difference-between-px-dp-dip-and-sp-in-android">Difference between px, dp, dip and sp in Android?</a>

本文轉自陳哈哈部落格園部落格,原文連結http://www.cnblogs.com/kissazi2/p/3307020.html如需轉載請自行聯系原作者

kissazi2

繼續閱讀