天天看點

Android衆說紛纭分辨率 尺寸 分辨率 密度 密度無關像素

Andoid最被人诟病的就是顯示屏的各種不同尺寸和不同分辨率。由于Android廠商的紛繁多樣,導緻出現了不同尺寸和不同分辨率的手機,訓示開發者需要相容各種手機螢幕。本文想學習的就是Android的顯示螢幕的各種名詞。

打開手機參數,會看到這樣的資料

Android衆說紛纭分辨率 尺寸 分辨率 密度 密度無關像素

尺寸指的是螢幕對角線的長度。以英寸作為度量機關。

分辨率指的是在長和寬上各有多少像素。用這個能知道寬高比,一般如果寬高比例是16:9,就是寬屏,4:3就是窄屏了。

我們平時說的VGA,HVGA,QVGA,WVGA,WQVGA是分辨率的概念:

VGA:Video Graphics Array,即:顯示繪圖矩陣,相當于640×480 像素;  

HVGA:Half-size VGA;即:VGA的一半,分辨率為480×320;  

QVGA:Quarter VGA;即:VGA的四分之一,分辨率為320×240;  

WVGA:Wide Video Graphics Array;即:擴大的VGA,分辨率為800×480像素;  

WQVGA:Wide Quarter VGA;即:擴大的QVGA,分辨率比QVGA高,比VGA低,一般是:400×240,480×272

指的是一英寸有多少像素點。

這裡使用的機關有幾個:dpi,ppi

ppi和dpi經常被混用,其實ppi才是正确的(pixel per inch),dpi(Dot Per inch)是在列印的時候才用到的。

比如上面那個手機參數中,密度是441ppi,則說明每1平方英寸的螢幕中有441*441個像素。

我們可以稍微做下計算,這個手機螢幕高有1920個像素,密度是441ppi,則高大緻有1920/441 = 4.35 英寸,寬有1080/441 = 2.44英寸。那矩形對角線長度(尺寸)5^2 ~ 4.35^2 + 2.44^2

我們可以看到我們的res檔案夾中儲存的圖檔資訊都是用dpi來做的,比如

drawable-hdpi

drawable-ldpi

drawable-mdpi

drawable-xdpi

hdpi就是高密度,mdpi中等密度,ldpi低密度,xdpi更高密度。

因為圖檔大小是以像素來算的,比如一個圖檔是400*300,就是長寬占的像素。

想象下兩個手機有同樣的尺寸和寬高比,但是一個是高密度高分辨率的,一個是低密度低分辨率的。那麼同樣一個圖檔在高密度的手機上就會顯示非常小,在低密度低分辨率手機上就會顯示非常大。是以對不同密度設定不同的圖檔是很有必要的。

我們一直都是用像素來做基本機關的,但是Android的大小分辨率不一,比如一個320的直線,在240*320的分辨率下正好放,但是在240*640的分辨率下隻顯示了一半,就是說這個圖檔展示實際和密度是相關的。是以Android引入了一個密度無關像素的概念。這是一個量詞,dp或者叫dip(Density Independent Pixel)。它和像素并不是一一對應的,是有一個換算公式的。比如在160dpi密度的螢幕中(1英寸有160*160個像素),那麼dp就和像素是等價的。如果說在320dpi密度的螢幕中,那麼一個dp就相當于2個像素了。

好處就是如果在開發中,比如一條直線以dp作為機關,那麼隻要設定一次,就可以适配到多個螢幕了。

首先Android将分辨率與密度綁定起來,做了一個約定

Android衆說紛纭分辨率 尺寸 分辨率 密度 密度無關像素

即320*480分辨率的手機,它的密度必須設定為160dpi,那麼它在寬上可以展示320個像素,也是320dp。對于480*800分辨率的在3寸到4寸手機呢,它的密度必須是240dpi,那麼在寬上可以顯示480像素,dp呢?160 / 240 * 480 = 320dp。也是可以顯示320dp。是以如果在程式中設定一條直線為320dp,那麼在不同分辨率下一樣會占滿了整個寬。

Android至今還有頭疼的圖檔分辨率的問題就在于px和dp的轉換上。我們的資源圖檔還是以px為機關,在轉換成dp的過程中會出現各種問題。比如轉換過程中的四舍五入的問題可能會導緻圖檔的顯示出現差異等。

本文轉自軒脈刃部落格園部落格,原文連結:http://www.cnblogs.com/yjf512/p/3181295.html,如需轉載請自行聯系原作者

繼續閱讀