AndroidStudio mipmap圖片大小,讀取順序各個目錄對應的尺寸

面試題:Android資源目錄的讀取順序?

Android資源文件可以定義在不同分辨率、屏幕方向、語言等(甚至還有夜間模式),當我們的應用需要使用一個資源,這個資源(圖片、Layout或者別的)可能在很多res下的子目錄中都存在,那麼Android系統是如何確認使用哪一個資源呢?

可以先看一下官方文檔提供資源(https://developer.android.com/guide/topics/resources/providing-resources.html),瞭解清楚資源目錄的配置和命名規則。


這就是一個Android應用的資源查找的順序問題,其實簡單說,在查找時會先去掉有衝突的資源目錄(上圖第1步),然後再按MCC、MNC、語言等指定的優先級進行查找,直到確認一個匹配資源。根據屏幕尺寸限定符選擇資源時,如果沒有更好的匹配資源,則系統將使用專爲小於當前屏幕的屏幕而設計的資源。

圖片放錯目錄會產生的問題嗎?

這一點可能很多人都不會注意,覺得只要往一個drawable目錄中放了需要的資源就好了。而我們可以自己做一個簡單的測試,把同一個圖片資源放在不同的dpi目錄,會發現它們使用的內存是不一樣的。簡單說就是高密度(density)的系統去使用低密度目錄下的圖片資源時,會將圖片長寬自動放大以去適應高密度的精度,當然圖片佔用的內存會更大。

所以如果能提各種dpi的對應資源那是最好,可以達到較好內存使用效果。如果提供的圖片資源有限,那麼圖片資源應該儘量放在高密度文件夾下,這樣可以節省圖片的內存開支。

mipmap

在使用Android Studio(應該是從1.1版本開始)創建Android應用項目時,常常會看到系統把ic_launcher.png圖標放在了mipmap-xxhdpi目錄下了。那麼這個mipmap是什麼意思呢?和drawable的對應dpi目錄有什麼區別呢?

我們知道,drawable文件夾是存放一些xml(如selector)和圖片,Android會根據設備的屏幕密度(density)自動去對應的drawable文件夾匹配資源文件。

那麼mipmap這個目錄有什麼用呢?

MIP來源於拉丁文中的multum in parvo,意爲在一個小空間裏的多數。MIP map(有時候拼寫成mipmap)是一種電腦圖形圖像技術,用於在三維圖像的二維代替物中達到立體感效應。

Android對放在mipmap目錄的圖標會忽略屏幕密度,會去儘量匹配大一點的,然後系統自動對圖片進行縮放,從而優化顯示和節省資源(使用上面說的mipmap技術)。就目前的版本來說,mipmap也沒有完全取代drawable的意思,爲了更好的顯示效果,官方建議如下類型的圖片資源可以放到mipmap目錄。

Launcher icons.

Action bar and tab icons.

Notification icons

drawable-nodpi文件夾

這個文件夾是一個密度無關的文件夾,放在這裏的圖片系統就不會對它進行自動縮放,原圖片是多大就會實際展示多大。但是要注意一個加載的順序,drawable-nodpi文件夾是在匹配密度文件夾和更高密度文件夾都找不到的情況下才會去這裏查找圖片的,因此放在drawable-nodpi文件夾裏的圖片通常情況下不建議再放到別的文件夾裏面。

res/raw和assets的區別

這兩個目錄下的文件都會被打包進APK,並且不經過任何的壓縮處理。

assets與res/raw不同點在於,assets支持任意深度的子目錄,這些文件不會生成任何資源ID,只能使用AssetManager按相對的路徑讀取文件。如需訪問原始文件名和文件層次結構,則可以考慮將某些資源保存在assets目錄下。

記得之前的版本(Android 2.2)對放在這兩個目錄的文件還有大小的限制,1M這樣吧,之後的版本沒有這個限制了。

和美工的關係

很多時候,UI設計師並不太瞭解Android的DPI,也不太清楚每種DPI對應的ICON規格。這時Android的開發就需要告訴他們一些規範,並結合自己的在真機上的測試經驗給予符合項目的ICON尺寸。對於每種密度下的ICON應該設計成什麼尺寸其實Android也是給出了最佳建議,ICON的尺寸最好不要隨意設計,因爲過低的分辨率會造成圖標模糊,而過高的分辨率只會徒增APK大小。

密度

建議尺寸

mipmap-mdpi

48 * 48

mipmap-hdpi

72 * 72

mipmap-xhdpi

96 * 96

mipmap-xxhdpi

144 * 144

mipmap-xxxhdpi

192 * 192

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章