前言
一入 Android 深似海,相信很多 Android 开发者深有体会,Android 系统版本的碎片化,Android 硬件设备的多样性,第三方 Rom 的不确定因素。现在想开发一个合格的商业化 App 真的不容易,先不说别的,应用的兼容性就是一项技术和耐心的双重考验,想完美适配各种情况可以说是不可能的,往往都是在人力和适配率之间寻找平衡,今天要说的 drawable 就是需要适配的一个重要角色。
配置限定符
对于不同的屏幕密度、不同的设备方向,不同的语言和区域,都会涉及到备选 drawable 资源,在运行时,Android 会检测当前设备配置并根据具体规则(后面会提到)为应用加载合适的资源。下面是可以使用的配置限定符,需要说明的是这些配置限定符不仅对 drawable 有效,对其他资源类型(如:layout 等)也有效:
移动国家代码 (MCC):mcc310, mcc310-mnc004, mcc208-mnc00
语言和区域:en, fr, en-rUS 等等
布局方向:ldrtl(从右到左)ldltr(从左到右)
smallestWidth:sw<N>dp 如:sw320dp, sw600dp, sw720dp 等等,屏幕可用高度和宽度的最小尺寸,屏幕的“最小可能尺寸”。
可用宽度:w<N>dp 如:w720dp, w1024dp 等等,指定资源应该使用的最小可用屏幕宽度,以 dp 为单位,由 <N> 值定义。在横向和纵向之间切换时,为了匹配当前实际宽度,此配置值也会随之发生变化。
可用高度:h<N>dp 如:h720dp, h1024dp 等等,指定资源应该使用的最小可用屏幕高度,以dp为单位,由 <N> 值定义。 在横向和纵向之间切换时,为了匹配当前实际高度,此配置值也会随之发生变化。
屏幕尺寸:small, normal, large, xlarge
屏幕纵横比:long 宽屏,如 WQVGA、WVGA、FWVGA;notlong 非宽屏,如 QVGA、HVGA 和 VGA
屏幕方向:port 设备处于纵向(垂直),land 设备处于横向(水平)
UI 模式:car, desk, television, appliance, watch
夜间模式:night 夜间,nontight 白天
屏幕像素密度:ldpi, mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi, nodpi, tvdpi
触摸屏类型:notouch, finger
键盘可用性:keysexposed, keyshidden, keyssoft
主要文本输入法:nokeys, qwerty, 12key
导航键可用性:navexposed 导航键可供用户使用,navhidden 导航键不可用
主要非触摸导航方法:nonav, dpad, trackball, wheel
平台版本(API 级别):v3, v4, v7 等等,如 v1 对应于 API 级别 1,v4 对应于 API 级别 4
如果你认真研究下每个配置限定符,你就会体会到:想完美适配各种情况可以说是不可能的,其实我们平时最常用的也是基本必须要用的就是屏幕像素密度,这里有必要详细的说一下该参数:
ldpi:低密度屏幕;约为 120dpi。
mdpi:中等密度(传统 HVGA)屏幕;约为 160dpi。
新闻热点
疑难解答
图片精选