引言
对于程序在不同尺寸的Android机器上执行,对UI的适用性造成了额外的开销,只是限定符的出现,非常方便的攻克了这个问题。通过创建限定符相关的文件夹来解决资源的载入。
限定符用处
限定符(mdpi,tvdpi,hdpi)能够帮助我们推断屏幕密度
限定符(land,port)能够帮助我们区分屏幕横竖屏状态
限定符(en,fr…)能够帮助我们语言和地区
限定符(v3,v4…)能够帮助我们区分安卓版本号
限定符(1024x600…)能够适配计算虚拟键或者不计算虚拟键的屏幕
……
限定符列表
屏幕尺寸 | small normal large xlarge | small:这样的屏相似低分辨率的QVGA屏幕。对于小屏的最小布局尺寸大约是320x426dp。比如QVGA低分辨率和VGA高分辨率。 normal:这样的屏相似中等分辨率的HVGA屏幕。对于普通屏幕的最小布局尺寸大约是320x470dp。 如。WQVGA低分辨率屏、HVGA中等分辨率屏、WVGA高分辨率屏。 在大多数情况下,这样的超大屏幕的设备由于太大而要放到背包中来携带,而且最有可能的是平板样式的设备。 警告:假设全部使用尺寸限定符的资源都比当前屏幕大,那么系统将不会使用它们。而且应用程序会在执行时崩溃(比如。假设全部的布局都被标记了xlarge限定符,而设备却是一个普通尺寸的屏幕)。 |
屏幕方向 | port land | port:纵向设备(垂直) land:横向设备(水平) 假设用户旋转屏幕,这个限定能够在应用程序执行期间改变。 orientation配置字段指示当前设备的方向。 |
屏幕像素密度(dpi) | ldpi mdpi hdpi xhdpi nodpi tvdpi | ldpi:针对大约120dpi的低分辨率屏幕。 mdpi:针对大约160dpi的中等分辨率屏幕(在传统的HVGA上); hdpi:针对大约240dpi的高分辨率屏幕; xhdpi:针对大约320dpi的超高分辨率屏幕。被加入在API基本8以后的版本号中; nodpi:这个限定被用于不想依据匹配的设备分辨率进行缩放的位图资源。 tvdpi:在mdpi和hdpi之间的屏幕。大约是213dpi。这样的分组不是基本的分辨率,大多数是为电视来考虑的。而且大多数应用不须要它—提供mdpi和hdpi资源就能够满足大多数应用程序须要了。而且系统会适当的缩放它们。 这个限定符在API级别13以后被引入。 假设感觉在电视或其它某些设备上的图片资源不好看,而且想要试用tvdpi资源。那么缩放因子是1.33*mdpi。比如,一个100px x 100px的mdpi图片的图片应该被放大成133px x 133px的tvdpi图片。 假设没有提供与当前设备配置匹配的可选资源,那么系统会使用最接近的资源。 |
MCC和MNC | mcc310 mcc310-mnc004 mcc208-mnc00 等 | MCC是移动国家代码的英文首字母缩写(The mobile country code)。它的后面可选择性的尾随来自设备内的SIM卡的移动网络代码(MNC:mobile network code)。如在不论什么载体上。mcc310代表美国。mcc310-mnc004代表美国的Venizon公司。mcc208-mnc00代表法国的Orange公司。 假设设备使用音频连接(GSM 电话),那么MCC和MNC的值来自SIM卡。 也能够单独使用MCC(比如,在应用程序中包括特殊国家合法的资源)。 假设仅须要指定语言环境,那么能够使用language和region限定符来替代(稍后讨论)。假设决定要使用MCC和MNC限定符。就要细致測试。使它能够满足你所期望的工作。 |
语言和地区 | en fr en-rUS fr-rFR fr-rCA 等 | 语言是用两个字母的ISO 639-1语言代码定义的。紧跟其后的是可选的两个ISO-3166-1-appha-2地区代码字母(前面是小写的“r”)。 这个编码不区分大写和小写。r前缀被用于区分地区部分,不能够单独指定地区。 假设用户改变了系统中的语言设置,那么在应用程序的执行期间也能够改变为相应的语言。 |
最小宽度 | sw<N>dp 比如: sw320dp sw600dp sw720dp 等 | 屏幕的基本尺寸,是指最短的可用屏幕区域。 详细的说。设备的最小宽度是屏幕可用的宽度和高度中最短的那个(也能够把它看做是屏幕的最小可能的宽度)。这样就能够使用这个限定符来确保应用程序至少有 比如,假设布局在不论什么时候都须要至少600dp的最小屏幕尺寸,那么就能够使用这个限定符,在res/layout-sw600dp/文件夹中创建布局资源。系统仅仅会在可用屏幕的尺寸至少是600dp的时候才会使用这些资源。而无论600dp是否是被用户认知的高度或宽度。最小宽度是设备的固定屏幕尺寸特征,当屏幕的方向发生改变时。设备的最小宽度不改变。 |
可用宽度 | w<N>dp 比如: w720dp w1024dp 等 | 指定最小的可用屏幕宽度。在资源中应该以dp为单位来定义<N> 的值。当方向在横向和纵向之间改变时。这个配置值会跟当前的实际的宽度相匹配。 这个值须要考虑屏幕装饰占领的空间。因此,假设设备在显示的左边或右边有一些固定的UI元素,那么使用的宽度值就要比实际的屏幕尺寸小。由于这些固定UI元素的占用,使得应用程序的可用空间降低。 这个特性被加入在API级别13中还要看screenWidthDp配置字段。它持有当前的屏幕宽度。 |
可用高度 | h<N>dp 比如: h720dp h1024dp 等 | 指定最小的可用屏幕高度,在资源中应该以dp为单位来定义的值,当方向在横向和纵向直接改变时。这个配置值应该跟当前的实际高度匹配。 当应用程序给这个配置提供了不同值的多个资源文件夹时。系统会使用最接近(不超过)设备当前屏幕高度的那个配置。 这个要考虑屏幕装饰的占用情况,因此,假设设备在显示的上方或底部有一些固定的UI元素。那么要使用的高度值要比实际的屏幕尺寸小,由于这些固定UI元素的占用,使得应用程序的可用空间降低。 不固定的屏幕装饰(如电话的状态栏能够在全屏时被隐藏)是不考虑的,像标题栏或操作栏这样的窗体装饰也不考虑,因此应用必须准备处理比它们指定的空间要小的情况。 这个限定符被加入在API级别13中。 |
屏幕外观 | long notlong | long:长屏幕,如WQVGA、WVGA、FWVGA notlong:非长屏幕,如QVGA、HVGA、VGA 这个限定符被加入在API级别4以后的版本号中 这个限定符全然是基于屏幕的外观比率。不相对屏幕的方向。 还要看screenLayout配置字段,它指示了屏幕是否是长屏。 |
泊位模式 | car desk | car:设备停靠在汽车中 desk:设备停靠在书桌中 这个限定符被加入在API级别8以后的版本号中,假设用户改变了设备的停靠地点,那么能够在应用程序的执行期间改变这个限定。 能够使用UiModeManager对象来启用或禁止这样的模式。 |
夜间模式 | night notnight | night:夜间 notnight:白天 被加入在API级别8以后的版本号中,假设夜间模式被保留在自己主动模式中(默认),那么在应用程序执行期间,会基于白天的时间来进行模式的改变。能够使用UiModeManager对象来启用或禁止这样的模式。 |
触屏类型 | notouch stylus finger | notouch:非触屏设备 stylus:有适用手写笔的电阻屏设备 finger:触屏设备 touchscreen配置字段,指示到了设备上的触屏类型。 |
键盘可用性 | keysexposed keyshidden keyssoft | keysexposed:设备有可用的键盘。假设设备启用了软键盘,那么即使在硬键盘没有暴露给用户时也能够使用这个限定符。假设没有提供软键盘或者软键盘被禁用,那么仅仅有在硬键盘被暴露给用户时才干够使用这个限定符。 keyshidden:设备有可用的硬键盘。可是被隐藏了。而且设备没有可用的软键盘。 keyssoft:设备有可用的软键盘,无论它是否可见。 假设提供了keysexposed资源。但没有keyssoft资源,那么仅仅要系统有可用的软键盘。系统就会使用keysexposed资源而无论键盘是否可见。 假设用户打开了硬键盘。就能够在应用程序执行期间改变这个限定。 hardKeyboardHidden和keyboardHidden配置字段分别指明硬键盘的可见性以及可见的键盘类型(包括软键盘)。 |
主要文本输入法 | nokeys qwerty l2key | nokeys:设备没实用于文本输入的硬键盘; qwerty:设备有标准的硬键盘。无论用户是否可见; 12key:设备有12个键的硬键盘,无论用户是否可见。 keyboard配置字段指明可用的主要文本输入方法。 |
导航键的有效性 | navexposed navhidden | navexposed:导航键对用户可用; navhidden:导航键不可用。 假设用户能够看到导航键,那么在应用程序执行时就能够改变这个限定。 navigationHidden配置字段,指示导航键是否隐藏。 |
基本的非触屏导航方法 | nonav dpad trackball wheel | nonav:除了使用触屏以外,设备没有其它导航设施。 dpad:设备实用于导航的定向板(d-pad)。 trackball:设备实用于导航的轨迹球。 wheel:设备实用于导航的定向滚轮(不常见)。 |
平台版本号(API 级别) | 比如: v3 v4 v7 等 | 设备支持的API级别。 如v1代表API级别1(带有Android1.0或更高版的设备),v4代表API级别4(带有Android1.6或更高版本号的设备) |
限定符演示样例
仅仅须要用横线加限定符的方式就可以使用,xx-限定符
限定符执行顺序
限定符的匹配是向下匹配。从高向低找。