- px (pixel): 就是我們最常用的螢幕解析度(如1024x768, 800x600等解析度單位就是px),是螢幕的實體像素,以RGB螢幕來說,是三原色合成的一個彩色點,就是1 px。
但px單位不被建議使用,因為不同的手機/平板可能具有不同的像素密度,例如同為4吋的手機,有480x320解析度的也有800x480解析度的,前者的像素密度就比較低。若同樣是480x480px的圖片,在不同手機上顯示的實際大小可能不同。 為了說明px像素與螢幕實際大小的關係,需要先了解另一個名詞dpi(dot per inch),其表示在1英吋有幾個點。160dpi就表示1英吋的長度中,會有160個pixel。
以同樣480px寬度的圖片為例,在120dpi, 160dpi, 240dpi, 320dpi的大小如下表:
pixel | dpi | 計算式 | 實際長度 |
---|---|---|---|
480 | 120 | 480/120 | 4.0 英吋 |
480 | 160 | 480/160 | 3.0 英吋 |
480 | 240 | 480/240 | 2.0 英吋 |
480 | 320 | 480/320 | 1.5 英吋 |
- dp(另一縮寫為dip, Density-Independent Pixels): 正因為使用像素px為長度單位,會有上述的問題。Android使用了dp的單位,直接翻譯叫"與(像素)密度無關的像素",就是想要有一種數字單位,在不同的dpi手機/平板下,實際長度會一樣。
讓我們來看看Andoid解決如何這個問題的方法的吧!首先,它將常用的幾個dpi列出來,有ldpi (low)為120dpi, mdpi (medium)為160dpi, hdpi (high)為240dpi, xhdpi (extra high)為320dpi。
其次,Andoid以mdpi(160dpi)為基礎,定義在160dpi的環境時,1dp=1px,其他的dpi在跟160dpi作乘法的換算。
dp dpi density pixel 計算式 實際長度 480 120 120/160=0.75 480*0.75=360 360/120 3.0 英吋 480 160 160/160=1.0 480*1.0=480 480/160 3.0 英吋 480 240 240/160=1.5 480*1.5=720 730/240 3.0 英吋 480 320 320/160=2.0 480*2.0=960 960/320 3.0 英吋
所以使用dp為長度單位,可以在不同的dpi手機/平板下,實際長度會一樣(但因為實際的dpi有時會有四捨五入問題,精確的說是"接近")。
- sp(Scale Independent Pixels): 觀念跟dp一樣,只要用在設定字體大小,但它也可以根據使用者設定的字體大小再作放大縮小。在160dpi的環境時,1sp=1dp=1px。
沒有留言:
張貼留言