轉 android螢幕適配方法

來源:互聯網
上載者:User

標籤:

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越大,如果脫離了螢幕的物理尺寸談解析度是沒有任何意義的。就像平板的解析度比手機的大,那是因為平板個大呀。從顏色顯示的細膩程度上講並不見得比手機強。

轉 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.