Image Asset和mipmap-anydpi-v26
因爲build.gradle
裏面寫的targetSdkVersion
低於26,而且也只是在安卓8.1以下的設備跑過,所以根本沒有發現應用圖標有問題。直到前幾天,忽然發現apk裝到機器上之後根本沒有顯示mipmap-*dpi
文件夾下的ic_launcher.png
,而是顯示了系統自帶的那個綠底白色的android機器人圖標。
因爲後來升級了Android Studio
,所以在manifest.xml
中發現多了個ic_launcher.xml
和ic_launcher_round.xml
的文件,這兩個文件放在mipmap-anydpi-v26
的文件夾下。
原本以爲ic_launcher_background
和ic_launcher_foreground
應該是個圖片,沒想到是個<vector></vector>
的xml
文件。而這個ic_launcher_foreground
預覽的時候可以看到就是白色的機器人。
方法1:刪掉mipmap-anydpi-v26
StackOverflow上有一個推薦的回答,就是把mipmap-anydpi-v26
這個文件夾刪去,因爲刪去之後系統沒機會找ic_launcher.xml
。對於安卓8.1來說,系統會優先讀mipmap-anydpi-v26
裏的ic_launcher
來匹配圖標,而不是像8.1以下的那樣直接讀取mipmap-*dpi
。然而,我的圖標還是沒有顯示出來。於是找到了博客說可以new一個Image Asset
來改圖標。
方法2:用Image Asset來製作adaptive icon
首先,確保build.gradle
裏面的buildSdk是26或以上的,否則沒辦法操作Image Asset裏的Resize。
mipmap-anydpi-v26
-> New -> Image Asset
打開之後是這樣的
Foreground Layer就是圖標的圖案(白色機器人),Background Layer是背景(綠色底)。
Name就是生成的這個icon的名字,如果不改名的話,那麼用Image Asset製作出來的icon就會替代原來放在mipmap-*dpi
裏的所有ic_launcher
和ic_launcher_round
。(當然會按照像素匹配)
Source Asset裏面的Path就是自定義的icon,因爲系統只生成一張icon,然後再把這些icon製作出不同的dpi類型的icon,所以Path裏面要選擇*dpi
最高的那張圖片,否則出來的icon一轉成xhdpi
之後就會變得特別模糊。
當選擇了一張圖片之後,
右上角的Preview裏面有很多個dpi可以預覽。現在很明顯可以看出這個圖片過大,所以需要在左下角Resize進行操作。
ic_launcher_foreground至少把圖案放在那個安全區的圓圈裏面。接下來就是ic_launcher_background。
如果不是要用圖片疊加的話,那麼Asset Type可以直接選Color而不選Image。
然後Next,再保存就行了。
這時重新打開ic_launcher.xml就會變成這樣
重新打開ic_launcher.png,原來的綠底白機器人會被替換掉