Android studio 下drawable与mipmap文件夹详解
阅读原文时间:2021年04月20日阅读:1

大家在App打包的时候会不会很疑惑为什么生成的apk文件这么大

   这个时候我们不妨浏览下项目的目录,可以看到一个叫res的目录长这个样子:

Android的APK文件大都是大在那几个名字里带drawable的目录上
适配所有机器和屏幕的图片素材和其他资源都在一个安装包里,肯定大啊

如果界面做得超简单,纯色啊均匀渐变
完全不使用图片资源,全用xml和canvas
或者直接用自带的Theme风格
二三十MB的APK直接减肥到10MB甚至更小也不是不可能

but! 如果你不使用图片资源,就等着被美工拉入黑名单吧(审美观严重扭曲的人不配成为UI小姐姐的好朋友)。

1.文件夹的创建

我们知道drawable和mipmap文件夹是有多个大小供你选择的,如下图:

如果你觉得文件夹不够满足图片大小的需求,也可以自己创建:

点击 Android resource directory 会弹出资源文件夹创建框,如下所示:

在 Resource type 下选择你想要创建的文件,我这里创建的是drawable文件夹,接下来选择创建的drawable文件的类型:

点击图中光标标记的按钮:

选择你想要创建的文件类型,点击OK就可以创建成功了。

回到正题:

2.先来说说该怎么存放图片

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-nodpi、drawable-xxhdpi文件夹、drawable-xxxhdpi文件夹;

如果更高密度的文件夹里都没有找到,就往更低密度的文件夹里寻找,drawable-ldpi文件夹下查找,以此类推;

如果都没找到,最终会在默认的drawable文件夹中寻找,如果默认的drawable文件夹中也没有那就会报错啦。(前提是把一张图片做成很多不同的分辨率放在各个对应密度的drawable文件夹下)。

如果不知道手机dpi的小伙伴可以在代码中用这个公式算出自己手机的dpi:

float xdpi = getResources().getDisplayMetrics().xdpi;
float ydpi = getResources().getDisplayMetrics().ydpi;

下面是dpi范围密度对应范围:

比如我的测试机的dpi是236的dpi那就是高密度,系统会首先去找drawable-hdpi下的图片

以上是dpi(像素点)的计算方式,分辨率的计算方式如下:

对于每种密度下的icon应该设计成什么尺寸其实Android也是给出了最佳建议,建议尺寸如下表所示:

反正大家记住drawable文件夹是放图片的(引导页背景图,轮播图,giftu图片等等),而mipmap则是放icon图标的,

为什么?

问得好!!!

 谷歌爸爸的回答。

3.接下来说说存放的图片的位置不同对占用内存的影响:

如果你的项目够厉害,或者说想要在google play上上架。建议mdpi,hdpi,xhdpi,xxhdpi每一种都放一套(ldpi就算了,基本看不到),因为google play会根据不同的手机density来打不同的apk包,这样不同的手机因为分辨率不同所调用的drawable文件夹也是不同的。

 如果是在国内的市场话。建议只放一套(h或者xhpdi),因为国内市场是没有上面那种机制的,放多套资源会导致安装包变得很大。

然后是大小的影响:

参考强子哥的这篇博客:

https://blog.csdn.net/zhaokaiqiang1992/article/details/49787117

重要结论强子哥都已经说了,注意的就是图片应该要根据图片自身的分辨率来选择放在哪个文件夹下,避免不必要的内存浪费。

毕竟同一张图片在高密度的文件夹里比放在低密度的文件夹里所占用的内存要小的多!

心有猛虎,细嗅蔷薇。前行的路上,与君共勉!

另外:如果你觉得我说的不错,不妨打赏一下博主?    

                                                                     

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章