通常在做适配时,为了适配不同分辨率的屏幕,对于同一个图标(icon.png),我们会在drawable,drawable-mdpi,drawable-xhdpi等文件夹下都放上同名。
分辨率与图标大小对应如下:
ldpi(0-120dpi)36*36px 图标大小
mdpi (120-160dpi) 48*48px
hdpi (160-240dpi) 72*72px
xhpi(240-320dpi) 96*96px
xxhdpi(320-480dpi) 144*144px
xxxhdpi(480-640dpi) 192*192px
那么问题来了,如果这些文件夹没有放全,比如drawable-xxhdpi文件夹下没有放这个icon.png,那么分辨率为xxhdpi的机型会匹配到哪个文件夹的png呢
答案如下:
假设真机分辨率为xxhdpi,那么将按照以下顺序依次匹配:
1 如果drawable-xxhdpi文件下有这张图片,那么就会优先被使用,在这种情况下,图片是不会被缩放的。
2 如果drawable-xxhdpi文件下没有这张图片时,系统就会自动去其他文件夹找这张图片,优先会去更高密度的文件夹下找这张图片,我们当前场景就是会去drawable-xxxhdpi文件夹下的icon.png。
3 如果drawable-xxxhdpi文件夹下里没有这张图片,接下来会尝试再找更高密度的文件夹,发现没有更高密度了,这时候会去drawable-nodpi文件夹找这张图片。
4 发现也没有,那么就会去更低密度下面找,依次是drawable-xhdpi -> drawable-hdpi ->drawable-mdpi ->drawable-ldpi 密度依次减小。
总体匹配规则就是这样,如果在drawable-xhdpi 文件夹下找到下面图片了,但是系统会认为你这张是专门为低密度的设备所设计的,如果直接将这张图片在当前的高密度设备上使用就有可能出现像素过低的情况,于是系统自动帮我们做了这样一个放大操作,因此图片会被放大显示。
那么同样的道理,如果系统是在drawable-xxxhdpi 文件夹下找到这张图片,它会认为直接将这张图是为了更高密度的设备所设计的,如果直接将这张图在当前设备上使用就有可能会出现像素过高的情况,于是系统帮我们做了一个缩小的操作。
drawable-nohdpi文件夹,这是一个密度无关的文件夹,在这里图片系统就不会对它进行自动缩放,原图片多大就会实际展示多大。
另外注意:
APP应用图标最好都放在mipmap文件夹下,其余资源放在drawable文件夹下。
网友评论