論Android Studio 中 mipmaps 與 drawable 的區別?

文章一:

原文:http://code.oneapm.com/android/2015/08/25/android3/

被遺忘的Android mipmaps簡介

導讀】已經發布的Android Studio1.1版本是一個bug修復版本。在這個版本中,當你創建工程時一項改變將會吸引你的眼球。工程創建登陸的圖標會在mipmap-resource文件夾中,而不是drawable文件夾中。

使用mipmap文件夾存放啓動圖標的好處

Android開發團隊認爲使用mipmap文件夾保存啓動圖標是最佳的開發方式。使用mipmap的最大優勢是你可以在各種屏幕密度的設備下將資源存儲在mipmap文件夾下,然後對於特定屏幕密度的設備你可以從drawable文件夾下去除掉與這個特定設備無關的資源信息。

我們用一個例子來說明這一特性。假設用戶有一個設備被標識爲xxhdpi的設備,那麼開發者apk中的drawable文件夾下的其他分辨率大小的資源,例如xxxhdpi分辨率,就是不被需要的;換句話說,就是可以被去除掉的。然而應用圖標很可能是與其他資源圖片不同的,因爲他可能佔據整個屏幕,因此你可能需要啓動圖標的分辨率高於其他資源。而這時你爲了設備適配的原因,高分辨率圖片所在的文件夾已經被你去除了,這時當程序運行時,系統會將原來低分辨率的圖片進行拉伸,然而這種做法可能會導致產生一個醜陋的模糊的圖片。

另一方面,你可能會說,你並不會使用去除資源來減少apk大小的方式去製作不同版本的apk文件。這個時候你用mipmap文件夾去存儲登陸圖標看上去不會產生任何意義。然而這並不意味着你不應該使用它,最好的使用它的理由莫過於Android開發團隊認爲應該使用它,並且把它描述爲了開發的最佳實踐。他們知道在Android的開發線上將會產生什麼樣的新特性,而且儘管沒有人能確定,但是Android開發團隊很可能計劃引入這樣一個新特性,就是在用戶下載App的時候,apk會自動丟棄掉不合適的資源文件

Android 登陸mipmap的歷史

在Android中mipmap資源文件夾很早就出現了,這個時間點遠遠早於他被介紹爲應該作爲Android開發社區應該大規模使用它的時間。Android的官方團隊並沒有發佈過多的原因來說明爲什麼要使用mipmap資源文件夾。在Android 4.3版本發佈的時候,Android 框架的卡法人員hackbod宣佈: 假如你正在爲不同屏幕分辨率版本的設備製作不同版本的app,那麼你應該去了解mipmap資源文件夾,它與drawable文件夾確實是驚人的相似,除了它並不參與屏幕適配在你生成不同版本的目標apk時。 自從這個宣佈之後,如果你仔細觀察Google的產品,你會發現一些app確實這樣做了。效果是在展示時,僅僅只是向屏幕傳輸了所被需要的分辨率的圖標,但是各種分辨率的登陸圖標都別保存到了mipmap資源文件夾下。 隨着時間的推進,並沒有過多關於使用mipmap資源文件夾保存登陸圖片的消息,知道Android 5.0出現在AOSP以及Nexus設備出現在了市場上。Android開發者的博客上標出了準備好讓你的app登陸Nexus6 和Nexus9. 這篇博文透露了一個應該使用mipmap文件夾的理由: 提供分辨率至少爲xxxhpdi的app圖標因爲身背可以展示更大的圖標在登陸的時刻。最好的方法就是見app圖標放在mipmap文件夾下因爲他將會根據屏幕分辨率以及使用場景選擇合適分辨率的圖片。例如 xxxhdpi的圖標將會被展示在xxhdpi分辨率的設備上

使用mipmap創建Android工程

更新Android Studio到最新版本,任何一個新的工程都將會使用mipmap的方式創建。

將現有的工程改變爲使用mipmap文件夾

假如你有一個優秀的工具Android Asset Studio去產生你的Android登陸圖標,你會注意到mipmap的改變已經被assets文件夾產生的結構所反映出來。 你的assets應該變得像之前的登陸圖標的結構那樣。 res/ mipmap-mdpi/iclauncher.png (48x48 pixels) mipmap-hdpi/iclauncher.png (72x72) mipmap-xhdpi/iclauncher.png (96x96) mipmap-xxhdpi/iclauncher.png (144x144) mipmap-xxxhdpi/iclauncher.png (192x192) 同時你要改變你的AndroidManifest.xml文件去使用mipmap作爲啓動圖標: android:icon="@mipmap/iclauncher"

本文系OneAPM工程師原創。想閱讀更多技術文章,請訪問OneAPM官方技術博客

文章二:

官方文檔:


Mipmapping for drawables

Using a mipmap as the source for your bitmap or drawable is a simple way to provide a quality image and various image scales, which can be particularly useful if you expect your image to be scaled during an animation.

Android 4.2 (API level 17) added support for mipmaps in the Bitmap class—Android swaps the mip images in your Bitmap when you've supplied a mipmap source and have enabled setHasMipMap(). Now in Android 4.3, you can enable mipmaps for a BitmapDrawable object as well, by providing a mipmap asset and setting the android:mipMap attribute in a bitmap resource file or by calling hasMipMap().

drawable/
For bitmap files (PNG, JPEG, or GIF), 9-Patch image files, and XML files that describe Drawable shapes or Drawable objects that contain multiple states (normal, pressed, or focused). See the Drawable resource type.

mipmap/
For app launcher icons. The Android system retains the resources in this folder (and density-specific folders such as mipmap-xxxhdpi) regardless of the screen resolution of the device where your app is installed. This behavior allows launcher apps to pick the best resolution icon for your app to display on the home screen. For more information about using the mipmap folders, see Managing Launcher Icons as mipmap Resources.

總結:官方只推薦把icon放入mipmap中,其餘資源還是應當放在drawable中.


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