天天看點

轉 android螢幕适配方法

android中圖檔适配是一件很棘手的事情,本篇文章詳細的介紹螢幕顯示的原理,為什麼會資源檔案中會存在

drawable-ldpi、drawable-mdpi、drawable-hdpi、drawable-xhdpi等檔案夾,為什麼要使用dp作為機關等等。

首先從這兩張圖檔的顯示效果開始說起

  1. 這是一張200x200的圖檔在不同的手機上的顯示效果。很明顯第二張圖檔看上去要比第一張占用的空間小很多?這是為什麼呢?

    這裡我們引入 ppi (pixel per inch)名詞,翻譯過來就是每英寸的距離像素點的個數。現在來解釋上面的現象。對于一張200x200像素的圖檔,我國我們想要顯示在 200ppi 的手機上,那麼占用螢幕的長和寬均為   200pix  /  (200pix / inch) = 1 inch  ,也就是說要占用 1 inch x 1 inch,如果要顯示在 300ppi 的手機上,那麼占用螢幕的長和寬均為  200pix  / (300pix / inch )  = 2/3 inch,也就是說對于 ppi越高的手機,機關inch上能夠顯示更多的像素點,是以當這兩種手機顯示同樣多的像素點的時候,ppi 越高的手機占用的空間就越小。這就是我們想要圖檔在各種手機螢幕上都顯示一緻的效果時需要解決的問題。

  2. 既然這種效果不是我們想要的,怎麼做才能擷取一緻的顯示效果呢?下面介紹三種方法

    方法一:對每一中不同的ppi使用不同的圖檔,這需要我們先判斷螢幕的ppi,再對圖檔進行處理,然後顯示,顯然比較麻煩。而且對于擷取螢幕ppi這個參數android并沒有提供給我們api調用。是以這種辦法基本行不通

    方法二:  在用eclipse開發環境生成一個android項目後,系統會給我們生成drawable-ldpi、drawable-mdpi、drawable-hdpi、drawable-xhdpi,drawable-xxhdpi,對于同一張圖檔資源,我們分别建立這五個版本來适應不同的螢幕。假設你想一張圖檔

    在 200ppi和400ppi的手機上顯示的長和寬都是一樣的為  1inch x 1inch,那麼你就需要制作一張200x200的圖檔和一張

    400x400的圖檔,然後放入對應得drawable目錄中就可以了。那麼程式運作時怎麼知道自己到底是使用哪個drawable目錄下

    的圖檔呢?這個是不需要我們考慮的,而是手機廠商考慮的問題,隻需要知道,程式會使用适應目前螢幕的目錄下的圖檔

    資源。

    drawable-ldpi、drawable-mdpi、drawable-hdpi、drawable-xhdpi,drawable-xxhdpi,這幾個目錄對應的pppi為

     120ppi  160ppi   240ppi    320ppi   480ppi ,也就是說如果螢幕的ppi為320,那麼就會優先使用drawable-xhdpi目錄下的

    圖檔資源。當然手機螢幕的ppi也是多種多樣,例如有的是  300ppi,有的是220ppi,這個系統會選擇最接近的目錄,也就

    是 300ppi的手機會選擇320ppi對應的drawable目錄下的資源

    方法三:方法2中需要為每個drawable目錄都生成對應的圖檔版本,如果圖檔較多的話,生成不同版本的圖檔倒是小事更主要的缺點是會增大應用的大小,那麼可不可以隻在一個目錄下存放圖檔,例如隻在drawable-mdpi目錄下存放圖檔呢答案是可以的,假設我們在drawable-hdpi(對應的ppi為160ppi)目錄下存放了一個100X100的圖檔,那麼當圖檔需要

    在320ppi的android裝置上進行顯示時,android系統會将自動将圖檔進行處理生成一個200X200的圖檔顯示到裝置上,那麼他們占用的空間大小分别為  100/160  = 3/5  inch     200/320 = 3/5 inch  可以看出他們占用的長和寬都是一樣的這種自動縮放的優點是隻需要一張圖檔就能适應各種ppi類型的螢幕。缺點是當對100X100的圖檔進行變換成200X200的圖檔時肯能會造成圖檔的不清晰,如果提供一個drawable-xhdpi下的圖檔資源,圖檔較多的話會無形增加應用的大小,是以說如何進行選擇也是一個衡量。建議是将比較重要的圖檔資源提供多個版本(當android裝置和自己的ppi相對應的drawable下找到想要的資源時,就不會再到其他目錄需找資源)。不是很重要的圖檔資源存儲一個版本,讓系統根據自己的ppi自己對圖檔進行适當的縮放顯示。

  3. 最後再說下為什麼在布局檔案中使用 dp作為機關而不是使用px

    dp是一個與螢幕ppi無關的參數,同時也是一個事實上并不存在的虛拟機關。顯示時會根據具體螢幕的ppi進行像素的映射,關系如下160ppi   1dp   1px120ppi   1dp   0.75px240ppi  1dp   1.5px320ppi  1dp  2px是以在布局檔案中一般使用dp作為機關,這樣就能适應不同ppi的螢幕,在各種ppi的螢幕上有一樣大的實體上的距離。(可以看出1dp并不總是等于1px的,對于ppi高的螢幕肯能要等于2px,隻是為了實體上看起來的距離是相等的)

  4. 最後希望大家能夠明白  我們經常說的分辨率和ppi的關系,其實他們是沒多大關系。分辨率隻是說明螢幕上有多少個像素點,這也跟螢幕大小有關系。當然對于螢幕大小相同的來講  分辨率越高 ppi越大,如果脫離了螢幕的實體尺寸談分辨率是沒有任何意義的。就像平闆的分辨率比手機的大,那是因為平闆個大呀。從顔色顯示的細膩程度上講并不見得比手機強。

轉載于:https://www.cnblogs.com/Small-Life/p/4415241.html