Android 开发 API指南 如何查找最佳匹配资源

当您请求要为其提供备用资源的资源时,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 中选择可绘制对象。
系统使用以下逻辑决定要使用的资源:

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

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

  1. 淘汰与设备配置冲突的资源文件。
drawable-fr-rCA/ 目录与 en-GB 语言区域冲突,因而被淘汰。
drawable/
drawable-en/
drawable-fr-rCA/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/
  1. 选择列表(表 2)中(下一个)优先级最高的限定符。(先从 MCC 开始,然后下移。)
  2. 是否有资源目录包括此限定符?
    • 若无,请返回到第 2 步,看看下一个限定符。(在该示例中,除非达到语言限定符,否则答案始终为“否”。)
    • 若有,请继续执行第 4 步。
  3. 淘汰不含此限定符的资源目录。在该示例中,系统会淘汰所有不含语言限定符的目录。
drawable/
drawable-en/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/

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

  1. 返回并重复第 2 步、第 3 步和第 4 步,直到只剩下一个目录为止。在此示例中,屏幕方向是下一个判断是否匹配的限定符。因此,未指定屏幕方向的资源被淘汰:
drawable-en/
drawable-en-port/
drawable-en-notouch-12key/
剩下的目录是 drawable-en-port

猜你喜欢

转载自blog.csdn.net/xiaocajiyyd/article/details/79360392