Android drawable图标的匹配顺序

来源:互联网 发布:java微信开发教程 pdf 编辑:程序博客网 时间:2024/05/11 21:47

通常在做适配时,为了适配不同分辨率的屏幕,对于同一个图标(命名为icon.png),我们会在drawable, drawable-mdpi,drawable-xhdpi等文件夹下都放上同名,不同大小的图标。

分辨率与图标大小对应如下:

LDPI (Low Density Screen,0~120 DPI),其图标大小为 36 x 36 px。MDPI (Medium Density Screen, 120~160 DPI),其图标大小为 48 x 48 px。HDPI (High Density Screen, 160~240 DPI),其图标大小为 72 x 72 px。xhdpi (Extra-high density screen, 240~320 DPI),其图标大小为 96 x 96 px。xxhdpi(xx-high density screen, 320~480 DPI),其图标大小为144 x 144 px。xxxhdpi(xxx-high density screen, 480~640 DPI),其图标大小为192 x 192 px。

那么问题来了,如果这些文件夹没有放全,比如drawable-xxhdpi文件夹下没有放这个icon.png,那么分辨率为xxhdpi的机型会匹配到哪个文件夹的icon.png呢?

答案如下:
假设真机分辨率是xxhdpi,那么将按以下顺序依次匹配:
1. 如果drawable-xxhdpi文件夹下有这张图就会优先被使用,在这种情况下,图片是不会被缩放的。
2. 如果drawable-xxhdpi文件夹下没有这张图时, 系统就会自动去其它文件夹下找这张图了,优先会去更高密度的文件夹下找这张图片,我们当前的场景就会去找drawable-xxxhdpi文件夹下的icon.png。
3. 如果发现drawable-xxxhdpi里也没有icon.png这张图,接下来会尝试再找更高密度的文件夹,发现没有更高密度的了,这个时候会去drawable-nodpi文件夹找这张图。
4. 发现也没有,那么就会去更低密度的文件夹下面找,依次是drawable-xhdpi -> drawable-hdpi -> drawable-mdpi -> drawable-ldpi,密度依次减小。

总体匹配规则就是这样,那么比如说现在终于在drawable-mdpi文件夹下面找到icon.png这张图了,但是系统会认为你这张图是专门为低密度的设备所设计的,如果直接将这张图在当前的高密度设备上使用就有可能会出现像素过低的情况,于是系统自动帮我们做了这样一个放大操作,因此图片会被放大显示。

那么同样的道理,如果系统是在drawable-xxxhdpi文件夹下面找到这张图的话,它会认为这张图是为更高密度的设备所设计的,如果直接将这张图在当前设备上使用就有可能会出现像素过高的情况,于是会自动帮我们做一个缩小的操作。

drawable-nodpi文件夹,这个文件夹是一个密度无关的文件夹,放在这里的图片系统就不会对它进行自动缩放,原图片是多大就会实际展示多大。但是要注意一个加载的顺序,drawable-nodpi文件夹是在匹配密度文件夹和更高密度文件夹都找不到的情况下才会去这里查找图片的,因此放在drawable-nodpi文件夹里的图片通常情况下不建议再放到别的文件夹里面。

另外注意:
App应用图标最好放到mipmap文件夹下。其余图片资源放在drawable文件夹下。

原创粉丝点击