做爲一名Android應用開發程序猿,最痛苦的事莫過於在屏幕適配了,這與歷史緣由有關,具體就不深究了。html
直到最近才搞明白dpi是怎麼換算的,在開發的過程當中,一個應用運行的屏幕標準應該是分辨率爲320x480密度爲160dpi的屏幕上,因此全部放在drawable、drawable-mdpi、values、layout、layout-normal的資源文件大小的單位就是px,1dp = 1px。好比有一張寬30px高45px的圖片放置在drawable-mdpi目錄下,那對應的dp單位就是30dp x 45dp。那麼放在drawable-hdpi目錄下的這張圖片的寬應該是30*1.5px,高45*1.5px,240/160=1.5。放置在drawable-xhdpi的天然就是30*20px和45*2px,320/160=2。android
可是,不少公司開發應用不會只開發Android版本的,一般是和IOS一塊兒開發,那美工所作的圖片若是給Android作四套圖(ldpi、mdpi、hdpi、xhdpi)的會很大工做量,經過的作法是把IOS中的640x960分辨率下的圖片拿過用,這樣實際只要一套圖就可以適配標準的Android手機屏幕,所謂的標準就是密度爲160dpi、分辨率爲320x480,密度爲240dpi、分辨率爲480x800等的屏幕,固然不包括平板,這類平板一般是指國內的平板,那屏幕大啊,而分辨率卻小,這類不包括在內。佈局
那麼該如何得用IOS中的640x960的圖片來適配呢,640x960分辨率的在Android系統中對應的應該是320dpi密度的,因此把這類圖片放置在drawable-xhdpi目錄下,而後在使用的時候,一般佈局文件都放置在layout目錄,該目錄是160dpi使用的,因此咱們須要把xhdpi中的圖片做一個處理,就是寬高分別除以2,320/160=2。spa
例如一張登陸按鈕圖片,IOS中對應的是640x960分辨率的,大小爲72x64,在Android中使用時把圖片放到xhdpi目錄,使用的時候這樣定義寬高設計
<ImageView android:layout_width="36dp" android:layout_height="32dp" android:src="@drawable/image" />
這樣作的目標是使圖片在Android自動轉換的時候不會出現失真的問題,把一張圖片從大往小轉是不會失真的,效果保持了。36dp是經過72/2獲得的,爲何除以2,是轉爲圖片是爲320dpi的屏幕設計的,可是佈局文件是在layout目錄的,也就是說這個佈局是爲160dpi的屏幕而設計的,所以須要轉換成160dpi標準的密度。orm
當應用在240dpi密度的屏幕上運行的話,圖片會被自動從160dpi轉換成240dpi,也就是36*1.5dp、32*1.5dp。實際是72*0.75dp、64*0.75,圖片只是做縮放,由於不存在失真的問題。htm
這種作法可以使圖片在120、160、240、320這四種標準密度上自適應,是一種按比例自動縮放的過程。同時圖片不存在失真的問題。只是若是內容過於多的狀況在120密度的屏幕上看很是難看的,道理就是把一張圖片從72x64縮小到了27x24。blog
轉載:http://blog.linguofeng.com/archive/2013/05/02/Android-Multiple-Screens.html圖片