你应该将每个类型的资源在项目的RES /目录下的某个特定子目录。例如,下面是一个简单的项目文件层次结构
MyProject/ src/ MyActivity.java res/ drawable/ graphic.png layout/ main.xml info.xml mipmap/ icon.png values/ strings.xml
正如你可以看到在这个例子中,RES /目录中包含的所有资源(在子目录):图像资源,二布局资源,为启动图标的mipmap/目录,和一个字符串资源文件。资源目录名称是重要的,在表1中描述。
注:有关使用的mipmap夹的详细信息,请参阅管理项目概述。
Table 1. Resource directories supported inside project
res/
directory.
Directory | Resource Type |
---|---|
animator/ |
XML files that define property animations. |
anim/ |
XML files that define tween animations. (Property animations can also be saved in this directory, but the animator/ directory is preferred for property animations to distinguish between the two types.) |
color/ |
XML files that define a state list of colors. See Color State List Resource |
drawable/ |
Bitmap files (
See Drawable Resources. |
mipmap/ |
Drawable files for different launcher icon densities. For more information on managing launcher icons with mipmap/ folders, see Managing Projects Overview. |
layout/ |
XML files that define a user interface layout. See Layout Resource. |
menu/ |
XML files that define application menus, such as an Options Menu, Context Menu, or Sub Menu. See Menu Resource. |
raw/ |
Arbitrary files to save in their raw form. To open these resources with a raw However, if you need access to original file names and file hierarchy, you might consider saving some resources in the |
values/ |
XML files that contain simple values, such as strings, integers, and colors. Whereas XML resource files in other Because each resource is defined with its own XML element, you can name the file whatever you want and place different resource types in one file. However, for clarity, you might want to place unique resource types in different files. For example, here are some filename conventions for resources you can create in this directory:
See String Resources, Style Resource, and More Resource Types. |
xml/ |
Arbitrary XML files that can be read at runtime by calling Resources.getXML() . Various XML configuration files must be saved here, such as a searchable configuration. |
图1的两个不同的设备,分别使用不同的布局的资源。
几乎每一个应用程序应该提供备用资源,以支持特定设备配置。例如,您应该包括不同屏幕密度和替代字符串资源为不同的语言替代绘图资源。在运行时,Android的检测当前的设备配置并加载相应的资源,为您的应用。
来指定一组资源的特定配置的替代方案:
创建RES /新目录的形式命名为<resources_name> - <config_qualifier>。
<resources_name>是相应的默认资源的目录名(在表1中定义)。
<限定符>是指定单个配置这些资源将被使用(在表2中所定义的)的名称。
您可以附加多个<预选赛>。分离每一个与破折号。
注意:当附加多个限定符,必须将它们放置在它们被列于表2。如果预选赛排序错了相同的顺序,这些资源将被忽略。
这个新目录中保存相应的替代资源。资源文件必须被命名为完全一样的默认资源文件。
例如,这里有一些默认的和替代性资源:
res/ drawable/ icon.png background.png drawable-hdpi/ icon.png background.png在华电国际限定符表示该目录中的资源是具有高密度屏幕的设备。在每一个这些可拉伸目录的图像的尺寸对于特定屏密度,但该文件名称是完全一样的。这样一来,您使用引用的icon.png或background.png图像资源ID始终是一样的,但Android的每个选择最当前的设备相匹配,通过设备的配置信息与在预选赛中比较资源的版本资源目录名称。
Android支持多种配置限定符,您可以通过每个限定符以破折号分隔添加多个预选赛一个目录名。表2列出了有效的配置预选赛中的优先顺序,如果你使用多个限定符的资源目录,则必须将它们添加到它们在表中列出的顺序的目录名。
表2.配置预选赛名。
配置限定符值说明
MCC和MNC的例子:
mcc310
mcc310-mnc004
mcc208-mnc00
等等
从该装置中的SIM卡的移动国家代码(MCC),任选地随后移动网络代码(MNC)。例如,mcc310是美国任何载体上,mcc310-mnc004是美国的Verizon和mcc208-mnc00是法国橙色。
如果设备使用的无线连接(GSM电话),MCC和MNC值来自SIM卡。
您也可以只使用MCC(例如,在您的应用程序特定国家的法律资源)。如果你需要指定基于语言只,然后用语言和区域预选赛,而不是(下面讨论)。如果您决定使用MCC和MNC预选赛上,你应该小心操作和测试,它按预期工作。
另请参见配置字段MCC和MNC,这表明目前的移动国家代码和移动网络代码分别。
语言和区域的例子:
恩
FR
EN-RUS
FR-RFR
FR-RCA
等等
语言是由两个字母组成的ISO 639-1语言代码,后面可以跟一个两个字母的ISO 3166-1-α-2区代码定义(小写“R”开头)。
该代码是不区分大小写;第r前缀用于区分区域部分。你不能仅靠指定的区域。
这可以如果用户在系统设置更改他或她的语言应用程序的生命周期内发生改变。请参阅处理运行时更改的信息,这将如何运行时影响应用程序。
见本地化的完整指南本地化用于其他语言的应用程序。
另请参见区域配置领域,这表明当前的语言环境。
布局方向ldrtl
ldltr
您的应用程序的布局方向。 ldrtl的意思是“布局方向从右至左”。 ldltr的意思是“布局方向左到右”,这是默认内含价值。
这可以适用于任何资源,如布局,图形或值。
例如,如果你想为阿拉伯语一些特定的布局和一些通用布局的任何其他“从右至左”语言(如波斯语或希伯来语),那么你就必须:
RES /
布局/
main.xml中(默认布局)
布局-AR /
main.xml中(阿拉伯语具体布局)
布局ldrtl /
main.xml中(任何“从右至左”的语言,除
阿拉伯语,因为“AR”语言限定
具有更高的优先级。)
注:为了使您的应用程序从右到左的布局功能,您必须设置supportsRtl为“true”,并设置targetSdkVersion 17或更高。
在API级别17。
最小宽度SW <N> DP
例子:
sw320dp
sw600dp
sw720dp
等等
屏幕的基本大小,可用屏幕区域的最短尺寸如图所示。具体而言,该器件的最小宽度是最短的屏幕的可用高度和宽度(你也可以认为它是“最小宽度可能”为屏幕)的。你可以使用这个限定词,以确保,无论画面当前的方向,你的应用程序至少<N>供其UI宽度DPS。
例如,如果你的布局要求,其最小的屏幕面积的大小至少为600 DP在任何时候,那么你可以使用这个限定符创建布局资源,RES /布局sw600dp /。只有当可用屏幕的最小尺寸至少为600 dp,无论600dp的一侧是否是用户感知的高度或宽度,系统将使用这些资源。的最小宽度是该装置的一个固定屏幕大小特性;当屏幕的方向改变了设备的smallestWidth不会改变。
设备的最小宽度考虑到屏幕装饰和系统界面。例如,如果设备具有占沿smallestWidth轴线空间在屏幕上一些持久UI元素,该系统的smallestWidth为比实际的屏幕尺寸小,因为这些是可提供的UI画面的像素。因此,您使用应该是布局所需的实际最小尺寸的值(通常,这个值是你的布局支持,无论画面的当前方位的“最小宽度”)。
有些值你可以使用这里常见的屏幕尺寸:
320,对于屏幕配置,如设备:
240×320 LDPI(QVGA手机)
MDPI小320x480(手机)
为480x800华电国际(高密度手机)
480,对于屏幕,如480×800 MDPI(平板电脑/手机)。
600,对于屏幕如600x1024 MDPI(7“平板电脑)。
720,对于屏幕如720x1280 MDPI(10“平板电脑)。
当应用程序提供的最小宽度限定不同值的多个资源目录,该系统采用一个最接近于(不超过)设备的smallestWidth。
在API级别13。
也看到了android:requiresSmallestWidthDp属性,它宣布最低最小宽度与您的应用程序是兼容的,并且smallestScreenWidthDp配置字段,用于存放设备的smallestWidth价值。
有关设计为不同的屏幕,并使用此限定符的更多信息,请参阅支持多种屏幕开发人员指南。
可用宽度w <N> DP
例子:
w720dp
w1024dp
等等
指定最小可用屏幕宽度,以dp单位在哪些资源应该由<N>值定义。当方向横向和纵向之间切换到当前的实际宽度相符,这个设定值将发生变化。
当你的应用程序提供了此配置的不同值的多个资源目录,该系统采用一个最接近于(不超过)设备的当前屏幕的宽度。这里的值考虑到屏幕的装饰品,因此,如果该装置具有在显示器的左边缘或右边缘的一些持久性UI元素,它使用了比所述真实画面尺寸小的宽度的值,占这些UI元素和还原应用程序的可用空间。
在API级别13。
另请参见screenWidthDp配置字段,它保存了当前屏幕的宽度。
有关设计为不同的屏幕,并使用此限定符的更多信息,请参阅支持多种屏幕开发人员指南。
可用高度h <N> DP
例子:
h720dp
h1024dp
等等
指定最小可用屏幕高度,在该资源应该由<N>值定义“DP”单位。当方向横向和纵向之间切换,以匹配当前的实际高度,这个设定值将发生变化。
当你的应用程序提供了此配置的不同值的多个资源目录,该系统采用一个最接近于(不超过)设备的当前屏幕的高度。这里的值考虑到屏幕的装饰品,因此,如果该装置具有在显示器的顶部或底部边缘的一些持久性UI元素,它使用了比所述真实画面尺寸小的高度的值,占这些UI元素和还原应用程序的可用空间。这是不固定的(例如,当全屏可以隐藏在手机的状态栏)不占在这里,也不是窗口装饰之类的标题栏或操作栏,因此应用程序必须准备应对一个稍小的屏幕装饰空间比他们指定。
在API级别13。
另请参见screenHeightDp配置字段,它保存了当前屏幕的宽度。
有关设计为不同的屏幕,并使用此限定符的更多信息,请参阅支持多种屏幕开发人员指南。
屏幕尺寸小
正常
大
XLARGE
小:屏幕是相似大小的低密度QVGA屏幕。对于小屏幕的最小布局尺寸大约为320x426 dp单位。例子是QVGA低密度和VGA高密度。
正常:屏幕是相似大小的中密度HVGA屏幕。对于普通屏幕的最小布局尺寸大约为320x470 dp单位。一个WQVGA低密度,HVGA中密度,WVGA高密度这样的屏幕的例子。
大:屏幕是相似大小的中密度VGA屏幕。对于大屏幕的最小布局尺寸约为480×640 dp单位。例子有VGA和WVGA中密度屏幕。
XLARGE:是比传统的中密度HVGA屏幕大得多的屏幕。对于XLARGE屏幕的最小布局尺寸大约为720x960 dp单位。在大多数情况下,具有超大屏幕的设备将太大装在口袋里携带,最有可能是平板电脑式的设备。在API级别9。
注意:使用尺寸限定符并不意味着资源仅用于该尺寸的屏幕。如果你不提供备用资源与更好地匹配当前设备配置预选赛中,该系统可以使用的任何资源是最好的搭配。
注意:如果所有的资源使用规模预选赛比当前屏幕越大,系统就不会使用它们,您的应用程序在运行时崩溃(例如,如果所有的布局资源都标有XLARGE预选赛,但该设备一个正常大小的屏幕)。
在API级别4。
见支持多种屏幕以获取更多信息。
另请参见屏幕布置配置字段,表示屏幕是小的,正常的,或大。
屏幕方面,长
不久
长:龙屏风,如WQVGA,WVGA,FWVGA
notlong:不长的屏幕,比如QVGA,HVGA和VGA
在API级别4。
这纯粹是基于屏幕的纵横比(“长”屏幕更宽)。这是不相关的屏幕方向。
另请参见屏幕布置配置字段,表示屏幕是否长。
圆筛圆
notround
轮:圆形的屏幕,如圆穿戴设备
notround:矩形屏幕,如手机或平板电脑
在API级别23。
另请参阅isScreenRound()配置方法,从而指示屏幕是否是圆的。
屏幕方向端口
土地
端口:设备是纵向(垂直)
土地:设备处于横向(水平)
这可以当用户旋转屏幕应用程序的生命周期内发生改变。请参阅处理运行时更改,有关如何在运行时这会影响您的应用程序的信息。
另请参见方向配置领域,这表明当前设备的方向。
UI模式车
台
电视
家电手表
汽车:设备在汽车码头显示
台:设备在桌子显示坞
电视:设备显示在电视上,提供了“十英尺”体验,其用户界面是在大屏幕上,用户远离,主要围绕DPAD或其他非指针面向互动
家电:设备作为一个设备,不带显示器
观看:设备具有显示器,并戴在手腕上
在API级别8,电视13 API补充道,20 API手表说。
有关时,该设备被插入或删除,从码头您的应用程序可以如何回应的信息,请参阅确定和监测的对接状态和类型。
这可以在用户将器件置于基座应用程序的生命周期内发生改变。您可以启用或禁用某些使用UiModeManager这些模式。请参阅处理运行时更改,有关如何在运行时这会影响您的应用程序的信息。
夜间模式夜
notnight
夜间:夜间
notnight:天时间
在API级别8。
这可如果夜间模式在自动模式(默认),在这种情况下,根据一天中的时间模式改变离开你的应用程序的生命周期内发生改变。您可以启用或使用UiModeManager禁用此模式。请参阅处理运行时更改,有关如何在运行时这会影响您的应用程序的信息。
屏幕像素密度(DPI)LDPI
MDPI
华电国际
xhdpi
xxhdpi
xxxhdpi
nodpi
tvdpi
LDPI:低密度的屏幕;约120DPI。
MDPI:中密度(传统HVGA)的屏幕;约160dpi。
华电国际:高密度屏幕;约240dpi。
xhdpi:特高密度屏幕;约320dpi。在API级别8
xxhdpi:特超高密度屏幕;约480dpi。在API级别16
xxxhdpi:特超超高密度的用途(只启动器图标,请记下支持多种屏幕);约640dpi。在API级别18
nodpi:这可以用于你不希望被缩放到器件密度相匹配的位图的资源。
tvdpi:MDPI和hdpi之间的屏幕;约213dpi。这不被视为一个“主”密度组。它主要用于电视和大多数应用程序并不需要它,提供MDPI和华电国际的资源足以满足大多数应用程序,系统将扩展他们适当的。此限定符与API级别13引入的。
有一个3:4:6:8:12:的六个主密度(忽略tvdpi密度)之间16缩放比率。所以,在LDPI一个9x9的位图是在MDPI 12×12,18×18在hdpi的,24×24在xhdpi等。
如果您认为您的图片资源不看不够好电视或其它某些设备上,并想尝试tvdpi资源,在缩放倍率是1.33 * MDPI。例如,对于mdpi屏幕的100像素点¯x100px的形象应该是133px点¯x133px的tvdpi。
注意:使用密度限定符并不意味着资源是只对密度的屏幕。如果你不提供备用资源与更好地匹配当前设备配置预选赛中,该系统可以使用的任何资源是最好的搭配。
见支持多种屏幕有关如何处理不同的屏幕密度,以及如何Android的可能扩展你的位图,以适应电流密度的更多信息。
触摸屏类型notouch
手指
notouch:设备不具有触摸屏。
手指:设备具有旨在通过用户的手指的方向相互作用中使用的触摸屏。
还看到触摸屏配置字段,其指示触摸屏的设备的类型。
键盘的可用性keysexposed
keyshidden
keyssoft
keysexposed:装置有可用的一个键盘。如果该装置具有使一个软件键盘(这是可能的),即使当硬件键盘不暴露给用户,这可能被使用,即使设备没有硬件键盘。如果没有提供软件键盘,或者它关闭,那么这是仅当一个硬件键盘露出使用。
keyshidden:设备有可用的硬件键盘,但它是隐藏的,该设备没有启用的软件键盘。
keyssoft:设备启用了软键盘,无论是可见或不可见。
如果提供keysexposed资源,但不keyssoft资源,该系统采用了keysexposed资源不管键盘是否是可见的,只要该系统启用的软件键盘。
这可以,如果用户打开一个硬件键盘应用程序的生命周期内发生改变。请参阅处理运行时更改,有关如何在运行时这会影响您的应用程序的信息。
另请参见配置字段hardKeyboardHidden和keyboardHidden,这表明一个硬件键盘的知名度和任何类型的键盘分别为(包括软件)的知名度。
主要文本输入法nokeys
QWERTY
12key
nokeys:设备具有文字输入任何硬件按键。
QWERTY:装置有一个硬件QWERTY键盘,无论是对用户或不可见的。
12key:装置有一个硬件12键键盘,无论是对用户或不可见的。
还看到键盘配置字段,其指示提供的主文本输入方法。
导航键的可用性navexposed
navhidden
navexposed:导航键是提供给用户。
navhidden:导航键是不可用(如封闭的盖的后面)。
这可以如果用户发现导航键应用程序的生命周期内发生改变。请参阅处理运行时更改,有关如何在运行时这会影响您的应用程序的信息。
另请参见navigationHidden配置字段,它指示导航键是否被隐藏。
主要非触摸导航方法nonav
DPAD
轨迹球
轮
nonav:设备具有比使用触摸屏之外,没有其他的导航设备。
DPAD:设备具有导航定向垫(D-PAD)。
轨迹球:装置有用于导航轨迹球。
轮:设备具有导航(罕见)定向轮(S)。
另请参见导航配置领域,这表明导航方法的类型可用。
平台版本(API级别)的例子:
V3
V4
V7
等等
API级别设备支持。例如,对于V1 API级别1(与Android 1.0或更高版本的设备)和v4的API等级4(与Android 1.6或更高版本的设备)。看到Android的API文档级别有关这些值的更多信息。
注:由于Android 1.0的一些配置预选赛已经添加,所以并不是Android的支持所有的预选赛所有版本。使用新的限定词隐含增加了平台版本预选赛使旧设备肯定会忽略它。例如,使用w600dp预选赛将自动包括V13预选赛上,因为可用的宽度限定在API级别13新为了避免任何问题,总是包括一组默认资源(不带预选赛一组资源)。欲了解更多信息,请参阅利用资源提供最佳的设备兼容性的部分。
预选赛名称规则
以下是关于使用配置限定符一些规则:
您可以为一组资源,短横线分开指定多个限定符。例如,绘制-ZH-RUS-地适用于横向美国英语设备。
限定符必须是在表2中列出例如顺序:
错误:绘制-HDPI端口/
正确:绘制口,华电国际/
替代资源目录不能嵌套。例如,你不能有RES /绘制/绘恩/。
值不区分大小写。资源编译器处理,以避免不区分大小写的文件系统的问题之前,目录名转换为小写。名称中的任何资本仅仅是受益可读性。
支持每个词类型只有一个值。例如,如果您要使用西班牙和法国同绘文件,你不能有一个名为绘制-RES-RFR /目录下。相反,你需要两个资源目录,如绘制-RES /和绘制-RFR /,其中包含相应的文件。不过,你不需要实际复制在这两个位置相同的文件。相反,你可以创建一个别名的资源。请参阅创建下面的别名资源。
在保存替代资源与这些限定词命名的目录,Android的自动根据当前设备配置在您的应用程序适用的资源。每次请求资源时,机器人检查包含所请求的资源的文件替代资源目录,然后找到最佳匹配的资源(以下讨论)。如果有匹配特定的设备配置,没有替代资源,然后Android使用相应的默认资源(不包括一个配置限定符特定资源类型的一组资源)。
创建别名资源
当你有,你想使用一个以上的设备配置(但不希望提供作为默认的资源)的资源,你不需要把同一资源在多个替代资源目录。相反,你可以(在某些情况下)创建充当保存到默认的资源目录的资源的别名替代的资源。
注:并非所有的资源提供,通过它可以创建一个别名到另一个资源的机制。特别是,动画,菜单,原料,以及其他未说明的资源,在XML /目录中不提供此功能。
例如,假设你有一个应用程序图标,的icon.png,并且需要不同地区的独特之处版本。但是,有两个语言环境,英语,加拿大和法国,加拿大,必须使用相同的版本。你可能会认为你需要相同的图像复制到资源目录英语,加拿大和法国,加拿大,但事实并非如此。相反,你可以保存的使用既作为icon_ca.png(比其他的icon.png任何名称)的图像,并把它在默认RES /绘制/目录下。然后创建一个资源文件icon.xml /绘-ZH-RCA /和RES /绘-FR-RCA /这是指使用<位图>元素icon_ca.png资源。这允许你只存储一个版本的PNG文件,并指向它两个小的XML文件。 (示例XML文件如下所示。)
可绘制
创建别名到现有的绘制,使用<位图>元素。例如:
<?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/icon_ca" />如果你(在一个替代资源目录,如RES /绘-EN-RCA /)保存此文件作为icon.xml,它被编译成一种资源,可以作为参考R.drawable.icon,但实际上是一个别名对于R.drawable.icon caresource(保存在res/绘制/)。
布局
创建别名到现有的布局,使用<include>元素,包裹在一个<合并>。 例如:
<?xml version="1.0" encoding="utf-8"?> <merge> <include layout="@layout/main_ltr"/> </merge>如果您将此文件保存为main.xml中,它被编译成可以作为R.layout.main引用的资源,但实际上是为R.layout.main LTR资源的别名。
字符串等简单值
创建别名到现有的字符串,只需使用所需的字符串资源ID作为新的字符串值。 例如:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello</string> <string name="hi">@string/hello</string> </resources>该R.string.hi资源不是用于R.string.hello的别名。
其他简单的值相同的方式工作。例如,一颜色:
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="yellow">#f00</color> <color name="highlight">@color/red</color> </resources>利用资源提供最佳的设备兼容性
为了让您的应用程序支持多个设备配置,这是非常重要的,你永远是您的应用程序使用的每个类型的资源提供默认的资源。
例如,如果您的应用程序支持多国语言,总是包括没有语言和区域预选赛值/目录(你的字符串保存)。如果你不是把你所有的字符串文件具有语言和区域预选赛目录,那么当设置为你的弦不支持的语言的设备上运行应用程序会崩溃。但是,只要你提供默认值/资源,那么你的应用程序将正常运行(即使用户不理解的语言,它比崩溃更好)。
同样,如果你提供了基于屏幕的方向不同的布局资源,你应该选择一个方向作为默认。例如,而不是在布局土地提供布局资源/景观和布局端口/肖像,留下一个作为默认,如布局/景观和布局端口/肖像。
提供了默认的资源不仅是因为您的应用程序可能会在配置运行,你没有预料到,也因为Android的新版本有时会添加旧版本不支持配置预选赛是非常重要的。如果使用新的资源预选赛,但保持与旧版本的Android的代码兼容性,那么当Android的旧版本,运行应用程序,它会崩溃,如果你不提供默认的资源,因为它不能使用新命名的资源预选赛。例如,如果你的minSdkVersion设置为4,你有资格全部采用夜间模式(夜间或notnight,这是在API级别8加)您可绘制资源,那么API级别4的设备无法访问您的绘图资源,并会崩溃。在这种情况下,你可能想notnight成为默认的资源,所以你应该排除限定让你的绘图资源是不是可绘制/或绘制夜/。
因此,为了提供最好的设备兼容性,永远为您的应用程序需要进行适当的资源提供默认的资源。然后创建使用设定限定特定设备配置替代资源。
有一个例外:如果你的应用程序的minSdkVersion是4或更高版本,则不需要默认绘制资源,当您提供替代绘图资源与屏幕密度预选赛。即使没有默认的绘制资源,机器人可以找到替代的屏幕密度之间的最佳匹配,并缩放位图是必要的。但是,对于所有类型的设备提供最佳体验,您应该为所有三种类型的密度提供备用可绘制。
Android如何寻找最匹配的资源
当您请求为您提供替代的资源,Android的选择了替代资源在运行时使用,根据当前的设备配置。为了演示的Android如何选择一个替代资源,假设以下绘制资源目录分别包含不同版本的同一图片:
drawable/ drawable-en/ drawable-fr-rCA/ drawable-en-port/ drawable-en-notouch-12key/ drawable-port-ldpi/ drawable-port-notouch-12key/And assume the following is the device configuration:
Locale =
通过设备配置比较可用的替代资源,Android的选择从绘制烯端口可绘制。en-GB
Screen orientation =port
Screen pixel density =hdpi
Touchscreen type =notouch
Primary text input method =12key
该系统到达其决定与以下逻辑要使用的资源:
图2.流程图的Android如何寻找最佳匹配的资源。
消除矛盾的设备配置资源文件。
可绘制-FR-RCA /目录中被淘汰,因为它违背了EN-GB语言环境。
绘制/
绘制恩/
绘制-FR-RCA /
绘制烯端口/
绘制烯notouch-12key /
绘制端口,LDPI /
绘制端口,无触摸式按键12 /
例外:屏幕的像素密度是一个限定符不会由于一个矛盾消除。即使该装置的屏幕密度HDPI,抽拉口-LDPI /不消除,因为每个屏幕的密度被认为是在这一点上的匹配。更多信息的支持多种屏幕文档中。
挑选列表(表2)(下)最高优先级的限定词。 (开始与MCC,然后向下移动。)
做任何资源目录包括这个限定词?
如果没有,回到步骤2,并期待在接下来的预选赛。 (在这个例子中,答案是“否”,直到达到语言限定符)。
如果是,继续执行步骤4。
消除资源目录不包括这个限定词。在这个例子中,系统消除所有不包括一个语言限定符的目录:
绘制/
绘制恩/
绘制烯端口/
绘制烯notouch-12key /
绘制端口,LDPI /
绘制端口-notouch-12key /
例外:如果有问题的预选赛是屏幕像素密度,Android的选择,该设备屏幕密度最匹配的选项。一般情况下,Android的更喜欢较大的原始图像缩小到扩大规模较小的原始图像。请参阅支持多个屏幕。
返回并重复步骤2,3,和4,直到只有一个目录仍然存在。在这个例子中,屏幕取向是下一个限定符其中有任何匹配。所以,没有指定屏幕方向的资源被淘汰:
绘制恩/
绘制烯端口/
绘制烯notouch-12key /
其余的目录是绘制烯端口。
虽然这个过程是针对每个被请求的资源执行,该系统进一步优化某些方面。一个这样的优化是,一旦设备配置是已知的,它可能会消除,可以从未匹配的替代资源。例如,如果配置的语言是英语(“EN”),那么,有一个语言限定设置为英语以外的其它任何资源目录从未纳入资源检查池(虽然没有语言限定的资源目录仍是包括在内)。
当基于屏幕尺寸预选赛选择资源时,系统将使用专为比当前屏幕较小的屏幕资源,如果没有资源,更好地匹配(例如,大尺寸屏幕将在必要时使用标准尺寸屏幕的资源)。然而,如果唯一可用的资源比当前屏幕越大,系统将不会使用它们,如果没有其他的资源相匹配的设备配置(例如,如果所有的布局资源只能加上XLARGE限定符应用程序会崩溃,但设备是一个正常大小的屏幕)。
注:预选赛(表2)的优先级比完全相同的设备匹配预选赛的数量更重要。例如,在上面的步骤4中,列表中的最后的选择包括恰好在设备(取向,触摸屏类型,并输入方式)相匹配,同时可拉伸烯只有一个匹配参数(语言)三种限定符。然而,语言比这些限定词的优先级高,所以绘制端口-notouch-12key出来了。
要了解更多有关如何在你的应用程序中使用资源,继续访问资源。