Android资源匹配机制

2018-07-31  本文已影响36人  GrayMonkey

Android应用程序按18个维度的资源限定符来组织应用程序资源,如下表所示

资源组织优先级列表

上表是一个优先级列表,优先级从高到底

资源匹配算法

资源匹配算法

为方便理解,以我们日常接触较多的drawable目录为例,假设手机设备配置如下:
语言区域:中国
屏幕像素密度(DPI):xdpi
屏幕方向:竖屏
1.排除与设备配置冲突的资源文件
由于手机语言设置为中文,所以
2.从优先级列表中选定(下一个)资源限定符
根据上面的优先级列表首先为选这MCC和MNC作为限定符,然后下移
3.判断当前所有资源目录是否含有此限定符
如果当前资源目录含有此限定符,则执行第四步,反之则执行第二步,从优先级列表中选择下一个资源限定符。
4.排除与资源限定符不匹配的资源目录
排除不含此限定符的资源目录

注意:如果涉及的限定符是屏幕像素密度,则 Android 会选择最接近设备屏幕密度的选项。通常,Android 倾向于缩小大型原始图像,而不是放大小型原始图像。

通用密度 范围值
ldpi(低) ~120dpi
mdpi(中) ~160dpi
hdpi(高) ~240dpi
xhdpi(超高) ~320dpi
xxhdpi(超超高) ~480dpi
xxxhdpi(超超超高) ~640dpi

个人理解,如果设备的实际DPI位于ldpi与mdpi交集段的中心,那么系统会倾向于使用mdpi目录下的资源,即缩小大图,缩小清晰度能得到保障,放大容易模糊。

图片来自官网

5.排除与当前资源限定符不符合的资源目录后,如果剩余的匹配目录不唯一,则重复执行第2、3、4步,直到匹配的资源目录唯一。

drawable-nxhdpi-2150x1080 dpi后面可以跟具体的分辨率,代码中nxhdpi看不懂,可解压apk,会发现对应440dpi-2150x1080

参考链接
https://developer.android.com/guide/topics/manifest/activity-element.html?hl=zh-cn#config
https://developer.android.com/guide/practices/screens_support.html
https://developer.android.com/guide/topics/resources/providing-resources.html
anddroid:configChange

上一篇下一篇

猜你喜欢

热点阅读