android螢幕分類與螢幕相關參數定義

來源:互聯網
上載者:User

標籤:dp   dpi   ppi   多屏適配   螢幕分類   

android裝置運行在各種不同的螢幕中,這些螢幕有著不同的screen sizes(螢幕大小)和screen densities(螢幕密度)。screen sizes表示螢幕的實際物理大小,比如5寸手機,7寸平板,8寸平板。而screen densities表示螢幕的像素密度,比如同樣5寸的手機,有720p的,有1080p的。screen sizes和screen densities從兩個維度資料表示了螢幕的屬性,他們互不影響。


Screen Sizes

螢幕的真實物理尺寸,以螢幕的對角線測量,一般以inch(寸)為單位,比如5寸手機,7寸平板。如所示:


根據不同的螢幕大小,可以把螢幕大小分為下面幾種類型:

  • small
  • normal
  • large
  • xlarge

這種分類方式是以第一部android手機G1為基準劃分的,G1屬於normal分類。隨著android手機螢幕的尺寸大小越來越豐富,這種分類方式就顯得簡單粗暴,無法滿足分類的精確度(比如5寸手機和7寸平板同屬於large分類)。所以在android3.2以後就沒有使用這種分類方式了,新的分類方式通過可用螢幕寬度來定義,在工程的資源檔中(如layout)使用,下面是一些例子:
  • layout-sw600dp
  • layout-sw720dp
  • values-sw340dp
這些分類的定義在後面會詳細講解,現在大家先有個概念。
Screen Densities在講screen densities前有幾個概念需要理解:px,ppi,dpi,resolution。1. px

px就是大家經常說的像素(pixel),像素是映像顯示的基本單位,pixel由picture和element兩個單片語合而成,有映像元素的意思,每個這樣的資訊元素是一個抽象的採樣,經常以一個點或者方塊表示。

2. ppippi(pixels per inch)表示映像中每英寸的像素數,ppi會影響螢幕輸出的品質,高的ppi在每英寸下包含的像素數多,顯示效果更好。對於一張100 x 100像素的圖片,100ppi的輸出顯示的大小為1" x 1"(1"表示1寸),在10ppi的輸出顯示的大小為10" x 10"。也就是說,同一張圖片在不同ppi下顯示的大小不一樣,ppi越大,圖片顯得越小。3. dpidpi(dots per inch)跟ppi是比較容易混淆的兩個概念,dpi表示螢幕每英寸物理顯示點的個數,物理顯示點是螢幕的最小顯示單元。假像輸出與螢幕的顯示點一一對應,即一個pixel在一個dot上顯示,那麼dpi的值等於ppi。但如果用一個1200dpi的螢幕全屏輸出一個300ppi的映像,那這時每個pixel由16個dots組成。(dpi與ppi的關係)4. resolutionresolution表示螢幕解析度,以像素為單位表示,如螢幕解析度為1920 x 1080,表示螢幕x,y方向分別可以顯示1920和1080個像素點。解析度在應用實現多屏適配的時候不起直接作用,多屏適配只與screen sizes和screen densities相關。
對以上的幾個概念有了初步認識後,下面我們來看screen densities的分類,在android中,screen densities是根據dpi來進行分類的,如下:
  • ldpi(low)~120dpi
  • mdpi(medium)~160dpi
  • hdpi(high)~240dpi
  • xhdpi(extra high)~320dpi
  • xxhdpi(extra extra high)~480dpi
  • xxxhdpi (extra extra extra high)~640dpi
  • ......

為了簡單,android根據dpi的值對screen densities進行了分類,每種分類包含了一個地區的dpi值,如所示。這種分類方式也是以第一部android手機G1為基準劃分的,G1的dpi為160dpi,屬於mdpi的分類。
下面ppi的計算公式,ppi是pixels per inch的意思,裝置的ppi用螢幕對角線中每inch的pixel數來表示,


比如nexus5手機,解析度為1920 x 1080,螢幕大小為4.95寸,那麼ppi的計算如下:


那螢幕的dpi如何計算了,如果是按照定義的話,公式跟ppi的計算公式是一樣的,只需把像素數換成dot的數量,但是我們並不知道dot的數量是多少。不過,我們可以通過程式擷取裝置的dpi值,代碼如下:

DisplayMetrics dm = getResources().getDisplayMetrics();int dpi = dm.densityDpi;
通過上面代碼獲得的dpi=480,也就是說dpi不等於ppi,如果一個pixel用一個dot顯示,按道理是應該相等的,但為什麼會不等呢?這個我也還沒搞清楚。不管怎樣,要擷取螢幕的dpi,不能用計算ppi的公式去計算獲得,要從代碼中去擷取。

總結:android裝置的螢幕的差異通過兩個維度來劃分,screen sizes 和 screen densities,為了簡單,android對不同的 screen sizes 和 screen densities做了歸類。它們兩者互不影響,一個表示螢幕的真實物理大小,一個表示螢幕的像素密度,這兩者的不同組合構成了各種各樣的裝置螢幕。在對android應用做多屏適配時,它們是主要考慮的因素。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.