美文网首页
Android应用程序的资源选择规则

Android应用程序的资源选择规则

作者: 呐喊的码农 | 来源:发表于2015-08-05 21:16 被阅读0次

    Android应用程序的资源选择的规则一共有18种,如图1:

    图1

    具体可参考:http://developer.android.com/guide/topics/resources/providing-resources.html#AlternativeResources。这18个规则是按照优先级从最大到小排列的,通过这些匹配规则,应用程序就能选择最佳的资源目录。

    在应用程序中我们可以根据这些规则来命名资源目录的名称,例如:drawable-port-hdpi。这里要注意几点:第一,这18个规则是有优先级的,所以如果上面的例子写成drawable-hdpi-port就会出问题;第二,资源目录是不允许嵌套的,诸如res/drawable/drawable-en/形式的资源目录都是不行的;第三,同一规则只能出现一次,诸如drawable-xhdpi-hdpi的命名是不允许的。

    上面所说的注意点其实和Android的匹配算法有关系,图2是官方给出的匹配算法,

    图2

    下面用官方的例子来说明下这个算法,详细内容可以参考http://developer.android.com/guide/topics/resources/providing-resources.html#BestMatch
    drawable/
    drawable-en/
    drawable-fr-rCA/
    drawable-en-port/
    drawable-en-notouch-12key/
    drawable-port-ldpi/
    drawable-port-notouch-12key/
    运行该程序的设备信息如下
    Locale = en-GB
    Screen orientation = port
    Screen pixel density = hdpi
    Touchscreen type = notouch
    Primary text input method = 12key
    根据图2的算法,一共分5步,
    1.首先排除与设备信息矛盾不符的目录,即:
    drawable/
    drawable-en/
    drawable-fr-rCA/
    drawable-en-port/
    drawable-en-notouch-12key/
    drawable-port-ldpi/
    drawable-port-notouch-12key/
    2.按照这18个规则的优先级,从MCC and MNC开始进行2~4步骤的筛选第一步筛选剩下的目录
    3. 看在第二步中选择的规则有没有匹配到文件夹,如果有,就执行第四步;如果没有就返回执行第二步,即切换到下一个优先级的规。。在这个例子中,MCC and MNC没有匹配到任何文件夹,所以返回第二步,切换到第二个规则Language and region进行筛选
    4.去除那些不含有第二步规则的资源目录,即:
    drawable/
    drawable-en/
    drawable-en-port/
    drawable-en-notouch-12key/
    drawable-port-ldpi/
    drawable-port-notouch-12key/
    5.继续执行2~4,直到找到一个最匹配的资源目录为止,即剩下最后一个目录。这个例子中,匹配screen orienation时,由于设备的screen orienation为port,因此,所有不包含有port资源目录将被去除,即:
    drawable-en/
    drawable-en-port/
    drawable-en-notouch-12key/
    所以最终会选择drawable-en-port/这个资源目录。

    相关文章

      网友评论

          本文标题:Android应用程序的资源选择规则

          本文链接:https://www.haomeiwen.com/subject/dsoyqttx.html