mipmap的出现已经很久了,但是图片放在mipmap还是drawable的各有各的看法和道理!最近详细研究了哈两者的区别

Google为什么将app应用图标放在mipmap里

唉!这个为什么?Google创建一个mipmap文件是专门用来只放app应用图标的吗?这里的app应用图标指的是app logo

唉!还真是!Google的原意就是mipmap只放logo图片,其余的app内应用图片还是放drawable,那究竟是为什么呢?听我细细道来

首先在Android mipmap的文件夹下 app会比安装的手机本身密度高一级或者两级去寻找图片,以xhdpi密度的手机为例,它取的是xxhdpi或者xxxhdpi文件下的icon,试想哈加载高密度的下的icon,那么是不是icon会显得很高清了呢?所以这也是为什么mipmap的在适配ui效果上高于drawable的原因,当然还有本身的纹理技术这个就不多说了,我也不晓得

按照上面的说法,那么我在drawable里面放置高于本身分辨率的图片不就行了吗?非也!在不同的机型上mipmap和drawable的适配又是不一样的,假设当前apk下drawable和mipmap 都存在hdpi、mdpi、xhdpi、xxhdpi、xxxhdpi,当这个apk安装在手机屏幕密度位xhdpi的时候 drawable会自动移除其余密度的文件,即保留drawable-xhdpi和drawable文件夹,但是mipmap是不会有文件变动的。 mipmap的文件夹下手机xhdpi密度就会向mipmap-xxhdpi以及mipmap-xxxhdpi的文件夹去找icon,这种情况下就会icon很高清,在drawable下只会去drawable-xhdpi下找,所以一旦在drawable的位置没有放对就会产生ui问题,看到这里是否有些明白Google为什么mipmap只放置logo图片了呢

那么问题又来了,国内有些人把图标放在mipmap的没怎么放在drawable的都是用错了吗?也不一定!我们要明白Google对图标的适配和我们实际的适配是有些不一样的!在hdpi、mdpi、xhdp、xxhdpi、xxxhdpi。都会放对应分辨率的图标,而国内也怎么做的会有多少?相信大家看多很多关于drawable的适配,直接保留最高密度的文件,一套图标适配。

那么试问一哈,当只有一套密度的适配下。mipmap-xxxhdpi和drawable-xxxhdpi谁更优呢?

参考文档

Android mipmap vs. drawable folder. Why we use mipmap instead of drawable to store Launcher icons?mipmap做了哪些事?