Android 如何查找最佳匹配资源(转)

当您请求要为其提供备用资源的资源时,Android 会根据当前的设备配置选择要在运行时使用的备用资源。为演示 Android 如何选择备用资源,假设以下可绘制对象目录分别包含相同图像的不同版本:

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

通过将设备配置与可用的备用资源进行比较,Android 从 drawable-en-port 中选择可绘制对象。

系统使用以下逻辑决定要使用的资源:

图 2. Android 如何查找最佳匹配资源的流程图。

 

 例外:屏幕像素密度是唯一一个未因冲突而被淘汰的限定符。 尽管设备的屏幕密度为 hdpi,但是 drawable-port-ldpi/ 未被淘汰,因为此时每个屏幕密度均视为匹配。

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

  1. 淘汰与设备配置冲突的资源文件。

    drawable-fr-rCA/ 目录与 en-GB 语言区域冲突,因而被淘汰。

  2. 选择列表(表 2)中(下一个)优先级最高的限定符。(先从 MCC 开始,然后下移。)
  3. 是否有资源目录包括此限定符?
    • 若无,请返回到第 2 步,看看下一个限定符。(在该示例中,除非达到语言限定符,否则答案始终为“否”。)  
    • 若有,请继续执行第 4 步。 
  4. 淘汰不含此限定符的资源目录。在该示例中,系统会淘汰所有不含语言限定符的目录
  5. 返回并重复第 2 步、第 3 步和第 4 步,直到只剩下一个目录为止。在此示例中,屏幕方向是下一个判断是否匹配的限定符。因此,未指定屏幕方向的资源被淘汰:

 

发布了43 篇原创文章 · 获赞 17 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Hitmi_/article/details/86771044
今日推荐