標籤:oid ima justify fan col float 解析度 pre dpi
參考自(54090891)
Android資源檔存放:
android的drawable檔案一共可以有:
drawable-ldpi(低密度) drawable-mdpi(中等密度) drawable-hdpi(高密度) drawable-xhdpi(超高密度)
drawable-xxhdpi(超超高密度) drawable-xxxhdpi(超超超高密度) drawable-nohdpi(無縮放) 當然還加上預設的drawable
----------以下是重點理解內容,一定要看懂----------
比如在一個中等解析度的手機上,Android就會選擇drawable-mdpi檔案夾下的圖片,檔案夾下有這張圖就會優先被使用,在這種情況下,圖片是不會被縮放的;
但是如果沒有在drawable-mdpi的檔案夾下找到相應圖片的話,Android系統會首先從更高一級的drawable-hdpi檔案夾中尋找,如果找到圖片資源就進行縮放處理,顯示在螢幕上;
如果drawable-hdpi檔案夾下也沒有的話,就依次往drawable-xhdpi檔案夾、drawable-xxhdpi檔案夾、drawable-xxxhdpi檔案夾、drawable-nodpi;
如果更高密度的檔案夾裡都沒有找到,就往更低密度的檔案夾裡尋找,drawable-ldpi檔案夾下尋找;
如果都沒找到,最終會在預設的drawable檔案夾中尋找,如果預設的drawable檔案夾中也沒有那就會報錯啦。(前提是把一張圖片做成很多不同的解析度放在各個對應密度的drawable檔案夾下)
舉個例子,假如當前裝置的dpi是320,系統會優先去drawable-xhdpi目錄尋找,如果找不到,會依次尋找xxhdpi → xxxhdpi → hdpi → mdpi → ldpi。對於不存在的drawable-[density]目錄直接跳過,中間任一目錄尋找到資源,則停止本次尋找。
如何知道自己裝置的dpi:
float xdpi = getResources().getDisplayMetrics().xdpi;float ydpi = getResources().getDisplayMetrics().ydpi;
知道裝置的dpi後就知道裝置首先會在哪個drawable檔案夾下去尋找了:dpi範圍密度對應範圍
裝置密度 |
適配資源檔密度 |
0dpi ~ 120dpi |
ldpi |
120dpi ~ 160dpi |
mdpi |
160dpi ~ 240dpi |
hdpi |
240dpi ~ 320dpi |
xhdpi |
320dpi ~ 480dpi |
xxhdpi |
480dpi ~ 640dpi |
xxxhdpi |
對於每種密度下的icon應該設計成什麼尺寸其實Android也是給出了最佳建議,建議尺寸如下表所示:
資源檔密度 |
建議尺寸 |
mipmap-mdpi |
48 * 48(博主實測表徵圖16就夠了) |
mipmap-hdpi |
72 * 72(博主實測表徵圖32就夠了) |
mipmap-xhdpi |
96 * 96(博主實測表徵圖48就夠了) |
mipmap-xxhdpi |
144 * 144(博主實測表徵圖64就夠了) |
mipmap-xxxhdpi |
192 * 192(博主實測表徵圖72就夠了) |
總體匹配規則就是這樣:
如果圖片所在目錄dpi低於匹配目錄,那麼該圖片被認為是為低密度裝置需要的,現在要顯示在高密度裝置上,圖片會被放大。
如果圖片所在目錄dpi高於匹配目錄,那麼該圖片被認為是為高密度裝置需要的,現在要顯示在低密度裝置上,圖片會被縮小。
如果圖片所在目錄為drawable-nodpi,則無論裝置dpi為多少,保留原圖片大小,不進行縮放。
六種通用密度
Android系統為了簡化開發人員為多種螢幕設計使用者介面的方式,Android將實際螢幕尺寸和範圍作了通用規定,稱作“根據可用螢幕寬度管理螢幕尺寸的新技術”。六種通用密度為
密度 |
dpi範圍 |
ldpi(低) |
~120dpi |
mdpi(中) |
~160dpi |
hdpi(高) |
~240dpi |
xhdpi(超高) |
~320dpi |
xxhdpi(超超高) |
~480dpi |
xxxhdpi(超超超高) |
~640dpi |
通用密度是以mdpi(中)為基準配置的,此基準基於第一代Android裝置(T-Mobile G1)的螢幕配置。
那麼六種通用密度下的縮放倍數是多少呢?以mdpi為基準,各密度目錄下的放大倍數(即縮放因子density)如下
密度 |
放大倍數 |
ldpi |
0.75 |
mdpi |
1.0 |
hdpi |
1.5 |
xhdpi |
2.0 |
xxhdpi |
3.0 |
xxxhdpi |
4.0 |
例如,當前裝置的dpi是480(即xxhdpi),那麼對於存放於mdpi目錄中的圖片會被放大三倍。對於很多裝置,其dpi並不剛好是六種通用密度最大dpi,這種情況下,圖片的縮放倍數如何計算呢?
稍微思考一下,我們就可以得到通用的縮放倍數(縮放因子)計算方法:對於任意裝置,各drawable-[density]目錄下的圖片放大倍數的計算公式
那麼,圖片的實現顯示尺寸通過圖片尺寸乘以縮放倍數就可以得到了。
Android 適配(drawable檔案夾)圖片適配(二)