理解Android中dpi和解析度的關係,談談Android做成適應全部手機的UI方式

來源:互聯網
上載者:User

標籤:

http://blog.csdn.net/ueryueryuery/article/details/20048401

 

最近我在做一個介面,UI給的切圖是1280x720這個解析度的,給的標註單位是px(像素)。 

 

我把原圖自然而然地放在drawable-xhdpi中,然後開始調整布局(當時我預設1dp=2px)。把這個布局放到一個720P的電視上,發現完全變形了,奇囧無比之際,看了下電視的density,發現這貨是1,這是一個mdpi的裝置!!!

然後我就開始想了,720P的切圖,要放在xhdpi這裡,但是有的裝置自身是mdpi之類的,那這個解析度和dpi到底是什麼關係?

 

樓主先是查了下基本的概念:

1.DPI:dots per inch,一英寸的像素數量,這個值是裝置自己決定的,是寫死的,當然也有廠商自己搞了個density=1.25的,我都不知道該說啥了...

Google規定的見下表:

 

  一英寸有多少個點兒? 我們用來density來分辨
ldpi 120dpi 0.75
mdpi 160dpi 1
hdpi 240dpi 1.5
xhdpi 320dpi 2

 

 

2.DIP(也就是我們用的dip/dp):device independent pixel,裝置獨立像素,我們不會直接使用px,而是使用dp,1 px = 1dp * density(由DPI)決定。

這裡完全沒有涉及到解析度的問題...我覺得dpi和解析度之間壓根沒有關係...

 

和基友討論了好一會,終於明白了以下這兩個問題:

 

1.為什麼一個720P的裝置,取mdpi裡的圖片,但是720P的切圖要放在xhdpi裡?

A: 這完全是根據主流手機來決定的,比如現在主流的是480P/hdpi的手機,那麼,在做UI時,就會取720P作為xhdpi,取320P作為mdpi,取240P作為ldpi,這樣一套套圖就切出來了。

如果,主流的手機解析度變成了720P/hdpi的手機,那麼,在做UI時,就會取480P作為mdpi,取1080P作為xhdpi,以此類推。

至於Google是這樣推薦的:取你手邊最大的解析度作為基準,做出最清晰的圖(xhdpi),然後,按比例縮放,做出hdpi、mdpi和ldpi。所以從原理上,720P的切圖放在哪裡是可以根據裝置來變換的。

 

2.如果720P的切圖在xhdpi裡,但我手頭有一個mdpi/720P的裝置,那怎麼辦呢?

(假設你的應用要支援所有奇葩的解析度,而且你已經切好了4套圖(ldpi~xhdpi)  並在layout裡寫了一套布局)

A: 如果你自己思考了dpi和解析度的關係的話,你會發現,他們的關係就是沒有關係...所以這個問題,我的解決辦法(大家的)是,讓多套dimens來幫我們解決這個問題。

 

  480p 600p 720p 1080p
mdpi values-sw480dp-mdpi values-sw600dp-mdpi values-sw720dp-mdpi values-sw1080dp-mdpi
hdpi values-sw480dp-hdpi
xhdpi values-sw480dp-xhdpi

在你的res檔案夾下,建立這些檔案夾,然後再放進一個dimens.xml,用這種方法,就可以應對所有的解析度情況了。

 

舉例說明下:如果原圖(1280x720)上有一個100x50(像素)大小的控制項,那麼對於一個正常的hdpi/800x480的裝置來說,應該設定它的大小(dp)為:

長:(100/720*480/1.5)dp = 45dp (向上取整)

寬:(50/720*480/1.5)dp = 23dp

將這兩個值寫在values-sw480dp-hdpi/dimens.xml裡,圖的比例和原圖就一樣了。

 

那對於一個剛才我列舉到的mdpi/1280x720的裝置,它的大小應該是:

長:(100/720*720/1) = 100dp;

寬:(50/720*720/1) = 50dp;

將這兩個值寫在values-sw720dp-mdpi中,圖的比例和原圖就一樣了。

 

3.不是我要黑IOS,如果IOS再出幾個解析度的話,那IOS開發人員是不是都要抓狂了呢?

A: 就現在而言,我很高興地回答你:是的! IOS布局的方式相當於Android中的絕對布局,而且它沒有wrap_content和match_parent這些方式,等到IOS 10長到及腰時,我看你等做IOS開發的腫麼辦,哈哈。

 

綜上,希望此帖可以幫到一些對Android布局有疑惑的同學~

理解Android中dpi和解析度的關係,談談Android做成適應全部手機的UI方式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.