参考:https://developer.android.google.cn/guide/topics/resources/providing-resources#BestMatch
有以下资源目录:
drawable/
drawable-en/
drawable-fr-rCA/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/
系统的设备配置环境:
语言区域 = en-GB
屏幕方向 = port
屏幕像素密度 = hdpi
触摸屏类型 = notouch
主要文本输入法 = 12key
各种配置修饰符之间存在优先级,优先级顺序可以参考:限定符优先级列表
此处优先级:en=fr > port > ldpi > notouch > 12key
按以下步骤淘汰目录:
- 淘汰与设备配置有冲突的目录
- 有冲突不是不存在,设备语言配置为en,而en与fr冲突,则包含fr的那个目录淘汰,但是没有语言修饰符的目录留存。
- 因此淘汰drawable-fr-rCA目录,留下来的目录为:
drawable/ drawable-en/ drawable-en-port/ drawable-en-notouch-12key/ drawable-port-ldpi/ drawable-port-notouch-12key/
- 系统根据限定符优先级从大到小顺序进行挑选,选出一个限定符,若所有目录都没有该限定符,则跳过选择下一个优先级较低的限定符进行筛选,若有目录包含该限定符,则淘汰不包含该限定符的目录,在此例中,筛选到语言限定符en时,淘汰不包含en的目录,剩下:
根据优先级筛选到port,删除不包含port的目录,剩下:drawable-en/ drawable-en-port/ drawable-en-notouch-12key/
最后筛选到只剩一个,就是最终要引用资源的目录。drawable-en-port/
第一阶段中屏幕像素密度的筛选是个例外,各屏幕像素密度之间各不冲突,android会挑选最接近设备像素密度的那个目录进行缩放适配。
网友评论