Android应用资源-提供资源(Providing Resources)_第1页
Android应用资源-提供资源(Providing Resources)_第2页
Android应用资源-提供资源(Providing Resources)_第3页
Android应用资源-提供资源(Providing Resources)_第4页
Android应用资源-提供资源(Providing Resources)_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

应该始终把像图片和字符串这样的资源作为外部与代码分离开,以便于能够独立的维护它们。还可以通过把资源组织到特殊命名的资源目录中,给特殊的设备配置提供可选的资源。在运行时,Android系统会基于当前的配置选择使用合适的资源。如,可以根据不同的屏幕尺寸提供不同UI布局,也可以根据系统的语言设置提供不同语言的字符串。把应用程序资源作为外部资源分离后,可以使用项目中自动生成的R类中的资源ID来访问对应的资源。如何使用应用程序中的资源会在“访问资源”一节中详细讨论,本文档主要讨论如何把资源组织到应用程序中,并且给特殊的设备配置提供可选的资源。按资源类型分组应该把每种类型的资源分别放到工程的res/目录的特定子目录中。例如,以下是一个简单的工程的文件组织结构:MyProject/src/MyActivity.javares/drawable/icon.pnglayout/main.xmlinfo.xmlvalues/strings.xml上例中res/目录包含了所有的资源(在其子目录中):一个图片资源、两个布局资源、以及一个字符串资源文件。资源目录的名称是中重要的,下表1中分别进行说明:目录资源类型animator/存放定义属性动画的XML文件anim/存放定义补建动画的XML文件(属性动画的XML文件也可以保存在这个目录中,但是animator/目录是给属性动画专用的,以区分这两种不同的动画类型。)color/存放定义颜色值的XML文件drawable/存放位图文件(.png、.jpg、.gif、.9.png),或者是被编译成以下可描画资源类型的XML文件:位图文件可变尺寸位图(Nine-Patches)状态图片(stateslist)4•形状5.动画绘制

6.其他可绘制资源layout/存放定义用户界面布局的XML文件menu/存放定义应用程序菜单的XML文件,如选项菜单、上下文菜单、或子菜单raw/存放任意原生格式的文件。调用Resources.openRawResource()方法来打开这些资源。但是,如果需要访问原始的文件名和目录,就要考虑把它们保存到assets/目录中(而不是res/raw/目录)。assets/目录中的文件没有资源ID,因此只能使用AssetManager来读取它们。values/存放包含简单值的XML文件,如字符串、整数以及颜色等。在其他的res/子目录中的XML资源文件都是基于XML文件名来定义一种资源,而在values/目录中的文件则可以定义多种资源。这个目录中每个文件中,母个<resources>兀素的子兀素都定义了一种资源。如,vstring>兀素就会创建R.string资源、vcolor>兀素就会创建R.color资源。因为每种资源都用它们自己的XML元素来定义,所以没有文件名的限制,并且可以在一个文件中放入不同的资源类型。但是,为了清晰,可能想要在一个文件中只放一种资源类型,以下是要在这个目录中创建的资源文件名的惯例:arrays.xml:针对资源数组(数组类型)colors.xml:针对颜色值dimens.xml:尺寸值strings.xml:字符串值styles.xml:样式xml/放在这个目录下的任意XML文件,都可以在运行时通过调用Resources.getXML()方法来读取。各种XML配置文件必须保存在这儿,如可搜索配置等。警告:不要把资源文件直接保存在res/目录中,这样会导致编译错误。保存在表1中定义的子目录中资源是默认资源。也就是说,这些资源定义了应用程序的默认设计和内容。但是,不同类型的Android设备可以调用不同类型的资源。例如,如果一个设备的屏幕比普通的要大,那么就应该提供不同的布局资源,以满足额外的屏幕空间的需要。或者,如果设备有不同语言设置,那么就应该提供不同的字符串资源,以便在用户界面上显示与设备语言相匹配的文字。要给不同的设备配置提供这些不同的资源,除了默认的资源以外,还要提供可选的替代资源。提供可选的替代资源乎每个应用程序都应该提供可选的替代资源,来支持特殊的设备配置。例如,应该针对不同的屏幕分辨率来包含可选的可描画资源,并且为不同的语言环境提供可选的字符串资源。在运行时,Android系统会检测当前设备配置,并给应用程序加载合适的资源。以下是给特殊配置指定一组可选资源的步骤:1.用vresources_name>-vconfig_qualifier>的格式在res/目录中创建一个新的目录,vresources_name>是对应的默认资源的目录名(表1中定义的);vqualifier>是给使用这些资源的设备所指定的一个单独配置的名字(表2中定义的)。每个名称可以用短划线来添加多个<qualifier〉警告:在添加多个限定符时,必须按照表2中列出的顺序来放置它们。如果限定符的顺序错了,资源就会被忽略。在这个新的目录中分别保存可选的替代资源。这些资源文件必须像默认资源文件一样被准确的命名。例如,以下是默认和可选资源的定义:res/drawable/icon.pngbackground.pngdrawable-hdpi/icon.pngbackground.pnghdpi限定符指示这个目录中资源是给高分辨率屏幕使用的。每个可描画目录中图片都是为特定分辨率的屏幕准备的,但是它们的文件名是完全相同的。这样用于引用icon.png和backgrounding图片的资源ID就会相同,Android系统会通过设备配置信息和资源目录名中的限定符的比较结果,来选择跟当前设备匹配最好的资源版本。Android支持几种配置限定符,并且可以在一个目录名中通过用短划线的分隔,来添加多个限定符。表2按照优先的顺序列出了有效的配置限定符,如果要在资源目录中使用多个限定符,一定要按照表2列出的顺序把它们添加到目录名中。表2.配置限定符名称配置限定符值说明MCC和MNC例如:mcc310mcc310-mnc004mcc208-mnc00等MCC是移动国家代码的央文首字母缩与(Themobilecountrycode),它的后面可选择性的跟随来自设备内的SIM卡的移动网络代码(MNC:mobilenetworkcode)。如在任何载体上,mcc310代表美国,mcc310-mnc004代表美国的Vfenizon公司,mcc208-mnc00代表法国的Orange公司。如果设备使用音频连接(GSM电话),那么MCC和MNC的值来自SIM卡。也可以单独使用MCC(例如,在应用程序中包含特殊国家合法的资源)。如果仅需要指定语言环境,那么可以使用language和region限定符来替代(稍后讨论)。如果决定要使用MCC和MNC限定符,就要仔细测试,使它能够满足你所期望的工作。还可以查看配置域mcc和mnc,它们分别指示了当前的移动国家代码和移动网络代码。mcc:/reference/android/content/res/Configuration.html#mccmnc:httD:〃/reference/android/content/res/Configuration.html#mnc

语言和地区例如:enfren-rUSfr-rFRfr-rCA语言是用两个字母的ISO639-1语言代码定义的,紧跟其后的是可选的两个ISO-3166-1-appha-2地区代码字母(前面是小写的“r”。这个编码不区分大小写,r前缀被用于区分地区部分,不能够单独指定地区。如果用户改变了系统中的语言设置,那么在应用程序的运行期间也能够改变为对应的语言。最小宽度swvN>dp例如:sw320dpsw600dpsw720dp等屏幕的基本尺寸,是指最短的可用屏幕区域。具体的说,设备的最小宽度是屏幕可用的宽度和高度中最短的那个(也可以把它看做是屏幕的最小可能的宽度)。这样就可以使用这个限定符来确保应用程序至少有<N>dp的宽度可用于UI界面,而不管屏幕的当前方向。例如,如果布局在任何时候都需要至少600dp的最小屏幕尺寸,那么就能够使用这个限定符,在res/layout-sw600dp/目录中创建布局资源。系统只会在可用屏幕的尺寸至少是600dp的时候才会使用这些资源,而不管600dp是否是被用户认知的咼度或宽度。最小宽度是设备的固定屏幕尺寸特征,当屏幕的方向发生改变时,设备的最小宽度不改变。设备的最小宽度需要考虑屏幕的装饰和系统UI的占用。例如,如果设备有一些固定的UI兀素要沿着最小宽度的轴向,占用一定的屏幕空间,那么系统声明的最小宽度要比实际的屏幕尺寸要小,因为被系统占用的像素部分对用户应用程序的UI无效。因此,这个值应该是应用程序布局所需要的最小的实际尺寸(通常,这个值是布局支持的最小宽度,而不管屏幕的当前方向)。以下是可以使用的通用屏幕尺寸的一些值:1.320,针对以下屏幕配置的设备:240x3201dpi(QVGA手持设备)320x480mdpi(手持设备)480x800hdpi(高分辨率手持设备)2.480,针对480x800mdpi的屏幕(平板或手持设备)3.600,针对600x1024mdip的屏幕(7英寸平板)4.720,针对720x1280mdip的屏幕(10英寸平板)当应用程序提供了多个带有不同值的最小宽度限定符资源目录时,系统会使用最接近(不超出)设备最小宽度的那个资源。这个限定符被添加在API级别13中。还要看android:requiresSmallestWidthDp属性,它声明了与你的应用程序兼容的最小的最小宽度,并且smallestScreenWidthDp配置字段会持有这个设备最小宽度的值。可用宽度w<N>dp例如:w720dpwl024dp等指定最小的可用屏幕宽度,在资源中应该以dp为单位来定义vN>的值。当方向在横向和纵向之间改变时,这个配置值会跟当前的实际的宽度相匹配。当应用程序给这个配置提供了多个不同值的资源目录时,系统会使用最接近(不超过)设备当前屏幕宽度的那个配置。这个值需要考虑屏幕装饰占据的空间,因此,如果设备在显示的左边或右边有一些固定的UI兀素,那么使用的宽度值就要比实际的屏幕尺寸小,因为这些固定UI元素的占用,使得应用程序的可用空间减少。

这个特性被添加在API级别13中还要看screenWidthDp配置字段,它持有当前的屏幕宽度。可用咼度hvN>dp例如:h720dphl024dp等指定最小的可用屏幕咼度,在资源中应该以dp为单位来定义vN>的值,当方向在横向和纵向直接改变时,这个配置值应该跟当前的实际咼度匹配。当应用程序给这个配置提供了不同值的多个资源目录时,系统会使用最接近(不超过)设备当前屏幕高度的那个配置。这个要考虑屏幕装饰的占用情况,因此,如果设备在显示的上方或底部有一些固定的UI兀素,那么要使用的高度值要比实际的屏幕尺寸小,因为这些固定UI兀素的占用,使得应用程序的可用空间减少。不固定的屏幕装饰(如电话的状态栏能够在全屏时被隐藏)是不考虑的,像标题栏或操作栏这样的窗口装饰也不考虑,因此应用必须准备处理比它们指定的空间要小的情况。这个限定符被添加在API级别13中。还要看screenHeightDp配置字段,它持有当前屏幕的咼度。屏幕尺寸smallnormallargexlargesmall:这种屏类似低分辨率的QVGA屏幕。对于小屏的最小布局尺寸大约是320x426dp。例如QVGA低分辨率和VGA高分辨率。normal:这种屏类似中等分辨率的HVGA屏幕。对于普通屏幕的最小布局尺寸大约是320x470dp。如,WQVGA低分辨率屏、HVGA中等分辨率屏、WVGA高分辨率屏。large:这种屏类似中等分辨率的VGA屏幕,对于大屏幕的最小布局尺寸大约是480x640dp。例如VGA和WVGA的中等分辨率屏。xlarge:这种屏被认为比传统的中等分辨率的HVGA屏幕大。针对xlarge屏的最小布局尺寸大约是720x960dp。在大多数情况下,这种超大屏幕的设备因为太大而要放到背包中来携带,而且最有可能的是平板样式的设备。注意:使用尺寸限定符不意味着资源仅用于这个尺寸的屏幕。如果没有用限定符提供与当前设备配置相匹配的可选资源,那么系统会使用与配置最接近的资源。警告:如果所有使用尺寸限定符的资源都比当前屏幕大,那么系统将不会使用它们,并且应用程序会在运行时崩溃(例如,如果所有的布局都被标记了xlarge限定符,而设备却是一个普通尺寸的屏幕)。这个限定符被添加在API级别4以后的版本中。屏幕外观longnotlonglong:长屏幕,如WQVGA、WVGA、FWVGAnotlong:非长屏幕,女口QVGA、HVGA、VGA这个限定符被添加在API级别4以后的版本中这个限定符完全是基于屏幕的外观比率,不相对屏幕的方向。还要看screenLayout配置字段,匕指示了屏幕是否是长屏。屏幕方向portlandport:纵向设备(垂直)land:横向设备(水平)如果用户旋转屏幕,这个限定能够在应用程序运行期间改变。orientation配置字段指示当前设备的方向。泊位carcar:设备停靠在汽车中

模式deskdesk:设备停靠在书桌中这个限定符被添加在API级别8以后的版本中如果用户改变了设备的停靠地点,那么能够在应用程序的运行期间改变这个限定。可以使用UiModeManager对象来启用或禁止这种模式。夜间模式nightnotnightnight:夜间notnight:白天被添加在API级别8以后的版本中如果夜间模式被保留在自动模式中(默认),那么在应用程序运行期间,会基于白天的时间来进行模式的改变。可以使用UiModeManager对象来启用或禁止这种模式。屏幕像素密度(dpi)1dpimdpihdpixhdpinodpitvdpildpi:针对大约120dpi的低分辨率屏幕;mdpi:针对大约160dpi的中等分辨率屏幕(在传统的HVGA上);hdpi:针对大约240dpi的高分辨率屏幕;xhdpi:针对大约320dpi的超高分辨率屏幕,被添加在API基本8以后的版本中;nodpi:这个限定被用于不想根据匹配的设备分辨率进行缩放的位图资源。tvdpi:在mdpi和hdpi之间的屏幕,大约是213dpi。这种分组不是主要的分辨率,大多数是为电视来考虑的,并且大多数应用不需要它---提供mdpi和hdpi资源就可以满足大多数应用程序需要了,并且系统会适当的缩放它们。这个限定符在API级别13以后被引入。四种主要的分辨率之间的缩放比例是:3:4:6:8(忽略tvdpi分辨率),因此一个9x9的ldpi位图,在mdpi中是12x12、在hdpi中是18x18、在xhdpi中是24x24。如果感觉在电视或其他某些设备上的图片资源不好看,并且想要试用tvdpi资源,那么缩放因子是1.33*mdpi。例如,一个100pxx100px的mdpi图片的图片应该被放大成133pxx133px的tvdpi图片。注意:使用分辨率限定符不意味着资源仅适用与对应分辨率的屏幕。如果没有提供与当前设备配置匹配的可选资源,那么系统会使用最接近的资源。触屏类型notouchstylusfingernotouch:非触屏设备stylus:有适用手写笔的电阻屏设备finger:触屏设备touchscreen配置字段,指示到了设备上的触屏类型。键盘可用性keysexposedkeyshiddenkeyssoftkeysexposed:设备有可用的键盘。如果设备启用了软键盘,那么即使在硬键盘没有暴露给用户时也可以使用这个限定符。如果没有提供软键盘或者软键盘被禁用,那么只有在硬键盘被暴露给用户时才能够使用这个限定符。keyshidden:设备有可用的硬键盘,但是被隐藏了,并且设备没有可用的软键盘。keyssoft:设备有可用的软键盘,不管它是否可见。如果提供了keysexposed资源,但没有keyssoft资源,那么只要系统有可用的软键盘,系统就会使用keysexposed资源而不管键盘是

否可见。如果用户打开了硬键盘,就可以在应用程序运行期间改变这个限定。hardKeyboardHidden和keyboardHidden配置字段分别指明硬键盘的可见性以及可见的键盘类型(包括软键盘)。主要文本输入法nokeysqwerty12keynokeys:设备没有用于文本输入的硬键盘;qwerty:设备有标准的硬键盘,不管用户是否可见;12key:设备有12个键的硬键盘,不管用户是否可见。keyboard配置字段指明可用的主要文本输入方法。导航键的有效性navexposednavhiddennavexposed:导航键对用户可用;navhidden:导航键不可用。如果用户能够看到导航键,那么在应用程序运行时就能够改变这个限定。navigationHidden配置字段,指示导航键是否隐藏。主要的非触屏导航方法nonavdpadtrackballwheelnonav:除了使用触屏以外,设备没有其他导航设施。dpad:设备有用于导航的定向板(d-pad)。trackbal1:设备有用于导航的轨迹球。wheel:设备有用于导航的定向滚轮(不常见)。navigation配置字段指明可用的导航方法类型。平台版本(API级别)例如:v3v4v7等设备支持的API级别。如v1代表API级别1(带有Android1.0或更咼版的设备),v4代表API级别4(带有Android1.6或更咼版本的设备)警告:Android1.5和1.6只有在限定符跟平台版本完全匹配时,才能匹配资源。注意:某些配置限定符从Android1.0开始就被添加了,因此不是所有的Android版本都支持所有的限定符。使用一个新的限定符,就隐含着添加了平台版本限定符,这样旧的设备才能够保证忽略这个限定符。如使用w600dp限定符,将自动的包含v13限定符。因为有效宽度限定符在API级别13以后才支持。要避免一些问题的发生,就要始终包含一组默认的资源(这组资源没有限定符)。限定符命名规则以下是有关使用配置限定符的命名规则:能够给单一的资源集合指定多个限定符,限定符用短横线分开。例如,drawable-en-rUS-land指定资源要用于横向的美式英语设备。限定符必须按照表2列出的顺序来使用,如:错误用法:drawable-hdpi-port正确用法:drawable-port-hdpi可选资源目录不能嵌套,如:不能用以下这样的目录结构:res/drawable/drawable-en/值是大小写敏感的。资源编译器为了避免有关大小写敏感的文件系统问题,会把目录名转换成小写。命名中的任何大写字母只是为了方便阅读。每个限定符类型只能支持一种资源值。例如,如果想对西班牙和法国使用同一个可描画文件,不能把目录名命名成drawable-rES-rFR/。相反需要两个目录,如:drawable-rES和drawable-rFR/,每个目录中包含对应的文件。但是实际上不需要在这两个目录中复制相同的文件,可以使用资源命名别名来解决,详细请看下面的“创建资源别名”。把这些可选资源保存到这些带有限定符的命名目录中后,Android会基于当前的设备配置在应用中自动的应用相应的资源。每次请求资源,Android都会检查包含请求资源文件的可选资源目录,然后查找最匹配的资源。如果没有跟实际设备配置匹配的可选资源,那么,Android会使用相应的默认资源(不包含配置限定符的一组资源)。给资源创建别名当要给多种设备配置使用同一个资源时(但不打算把这个资源作为默认资源),不需要把相同的资源放在多个可选资源目录中,相反,在某些情况下,能够像保存在默认资源目录中一样给可选资源创一个别名。注意:不是所有的资源都提供能够创建一个指向另外一个资源的别名的机制。实际上,animation/、menu/、raw/以及xml/目录中的非特定资源不提供这中功能。。例如,假设有一个应用程序图标:icon.png,它在不同的地区需呀唯一的版本。但是,有两个地区,加拿大英语去和加拿大法语区,它们需要使用相同的版本。可以假设需要把相同的图片分别复制到加拿大英语区和加拿大法语区的资源目录中,但实际上不需要这么做。可以把使用icon_ca.png名字来保存这张图片(icon.png以外的任意名称),并且把它放到默认的res/drawabel/目录中,然后在res/drawable-en-rCA/和res/drawable-fr-rCA/目录中创建一个cion.xml文件,使用vbitmap>元素指向icon_ca.png资源。这样就允许只保存一个版本的PNG文件,并且有两个小的XML文件指向它。可描画资源别名使用vbitmap>元素,给一个既存的可描画资源创建一个别名,例如:?xmlversion="1.0"encoding="utf-8"?><bitmapxmlns:android="/apk/res/android"android:src="@drawable/icon_ca"/>如果把这个文件作为icon.xml来保存在一个可选资源目录中,如res/drawable-en-rCA/,那么它就会被编译进能够使用R.drawable.icon来引用的资源,但是实际上它是R.drawable.cion_ca资源的一个别名。布局资源别名使用封装在<merge〉元素中的<include>元素来给一个既存的布局创建别名,如:<?xmlversion="1.0"encoding="utf-8"?><merge><includelayout="@layout/main_ltr"/></merge>如果把这个文件保存为main.xml,那么它就会被编译进能够用R.layout.main来引用的一个资源,但是实际上它是R.layout.main」tr资源的别名。字符串和其他简单值的资源别名只需简单的使用被期望的字符串的资源ID作为新的字符串的值,就可以给一个既存的字符串创建一个别名,如:<?xmlversion="1.0"encoding="utf-8"?><resources><stringname="hello">Hello</string><stringname="hi">@string/hello</string></resources>R.string.hi资源现在是R.string.hello资源的一个别名。其他简单的值资源也是用同样的方法,如一个颜色值:<?xmlversion="1.0"encoding="utf-8"?><resources><colorname="yellow">#f00</color><colorname="highlight">@color/red</color></resources>使用资源提供最好的设备兼容性为了让应用程序支持多种设备配置,始终给应用程序使用的每种资源类型都提供默认的资源是至关重要的。例如,如果应用程序支持几种语言,就要始终包含没有语言和区域限定符的values/目录。如果把所有的字符串文件都放到由语言和区域限定符的目录中,那么当应用程序运行在不支持应用程序提供的语言集的设备上时,就会崩溃。但是,只要提供了默认的values/资源,应用程序就会正确的运行(即使用户不能理解应用程序提供的语言集,也比程序崩溃要好。)同样,如果基于屏幕的方向,提供了不同的布局资源,那么也应该选择一个方向作为默认布局。例如,不要在layout-land/目录和layout-port目录中分别提供横向和纵向布局资源,而是要保留其中一个作为默认布局,如让layout/目录作为默认横行布局资源的存放地,而layout-port/目录保存纵向布局资源。提供默认资源是重要的,不仅因为可以让应用程序在没有预计到的设备上运行,而且还因为某些在Android新版本中添加的配置限定符,旧版本不支持。如果使用了新的资源限定符,但是还要维护代码与Android旧的版本的兼容性,那么当应用程序运行在旧的Android版本上时,如果提供默认资源,应用程序就会崩溃,因为使用了新的限定符命名的资源对应用程序不可用。例如,如果minSdkVersion被设置为4,并且限定了所有的可描画资源都是用night模式(night和notnight限定符在API级别8以后才被添加),那么API级别4的设备就不能访问这些可描画资源,应用程序就会因而崩溃。在这种情况中,可以让notnight模式的资源作为默认资源,因此应该在可描画资源的目录名去除notnight限定符,使得资源目录名如:drawable/、drawable-night/。因此,为了提供最好的设备兼容性,首先应该始终提供默认资源,以便应用程序能够获得正确执行的资源,然后使用配置限定符给特殊的设备配置创建可选的资源。这种规则对一种情况除外,如果应用的minSdkVersion是4或更大,在用屏幕分辨率限定符提供可选的描画资源时,就不需要默认的可描画资源。因为,即使没有默认的可描画资源,Android也能够在可选的屏幕分辨率之间找到最匹配的资源,并且按照需要缩放位图。但是,对于所有的设备类型,要获取最好的体验,应该为三种类型的分辨率提供可选的资源。如果minSdkVersion小于4(Android1.5或更低的版本),要注意屏幕的尺寸、分辨率、以及外观限定符是不被支持的,因此对于这些版本的平台需要执行另外的兼容性处理。给Android1.5提供屏幕资源的兼容性Android1.5及更低版本,不支持下列配置限定符:分辨率:ldpi、mdpi、hdpi、nodpi屏幕尺寸:small、normal、large屏幕外观:long、notlong这些配置限定符是在Androidl.6中被引入的,因此Androidl.5(API级别3及更低版本都不支持它们。如果使用这些配置限定符,并且没有提供相应的默认资源,那么Android1.5设备可能使用上述屏幕配置限定命名的任意一个资源目录中的资源,因为它忽略这些限定符,并使用它能够找到的第一个匹配的可描画资源。例如,如果应用程序支持Androidl.5,并且包含了每种分辨率类型的可描画资源(drawable-ldpi/、drawable-mdpi/、drawable-hdpi/),而且没有包含默认的可描画资源(drawable/),那么Androidl.5就会使用任意一个可描画资源目录中的资源,这样就会导致用户界面的不理想。因此在使用屏幕配置限定符时,要提供与Androidl.5及以前版本的兼容性:把中等分辨率、普通的屏幕尺寸以及非长屏幕作为默认资源来提供。因为所有的Androidl.5设备都有中等的分辨率、普通的屏幕尺寸以及非长的屏幕,所以能够把这些类型的资源放到对应的默认资源目录中。例如,把所有的中等分辨率的可描画资源放到drawable/目录中(而不是drawable-mdpi/),把normal尺寸的资源放到对应的默认资源目录中,并且把notlong资源也放到对应的默认资源目录中。要确保SDK工具的版本时r6或更高的版本。SDK工具需要修订版本6或更高,因为它包含一个新的打包工具,这个工具能够自动的把相应版本限定符中资源应用于任何Androidl.0中不存在资源目录。例如,分辨率限定符是在Androidl.6中(API级别4)被引入的,当打包工具遇到这样的目录时,它就会给目录名中添加“v4”来确保旧版本不使用这些资源(只有API级别4和更高版本支持的限定符中的资源)。这样,通过把中等分辨率资源放到没有mdpi限定符的目录中,它们依然可以被Androidl.5访问,并且支持这个分辨率限定符和有中等分辨率屏幕的任何设备也会使用这个默认资源,因为它们跟设备最匹配。注意:Android的后续版本,如API级别8中引入的旧版本不支持的配置限定符。要提供最好的兼容性,就应该始终给每种类型的资源包含一组应用程序使用的默认资源。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通过比较设备配置来选择有效的可选资源:drawable-en-port。系统使用以下逻辑最终判断要使用的资源:排除矛盾的设备配置的资源文件。Drawable-fr-rCA/目录被排除,因为它跟en-GB矛盾drawable/drawable-en/dramwablo~fr-rCA/drawable-en-port/drawablo-on-notouch-12koy/drawablo-port-ldpi/drawablo-port-notouch-12koy/例外:屏幕像素分辨率限定符即使是矛盾的也不排除在外,即使设备的屏幕分辨率hdpi,drawable-port-ldpi/不被排除是因为在这个时点,每种分辨率都被认为是匹配的。选取列表2中最高优先级的限定符。(从MCC开始,然后向下移动)。任何的资源目录包含这个限定符吗?如果没有,则返回第2步,继续比较下一个限定符(在这个例子中,在比较到语言限定符之前一直回到“no”。如果回答“yes”,那么继续到步骤4消除资源目录名中不包含这个限定符的目录,在这个例子中,系统会排除所有不包含语言限定符的目录:drawablo/drawablo-on/drawablo-on-port/drawablo-on-notouch-12koy/drawablo—port=ldpi/drawablo-port-notouch-12koy/例外:如果提问中的限定符是屏幕像素分辨率,Android会选择那个与设备屏幕分辨率最接近的那个选项。通常,Android提供把一个大的原始图片缩小的图片的能力。返回,重复步骤2、3、4,直到剩下最后一个目录。在这个例子中,屏幕方向是下一个要匹配的限定符,没有指定屏幕方向的资源目录就会

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论