android适配规则(一)

http://my.oschina.net/wangjunhe/blog/98739


如有理解错,希望被指出

单位杂谈: 
px(pixel) 屏幕像素

dip(density-independent pixel) 设备独立像素,缩写为dp,可以理解为另外一种标识像素的单位,它与像素存在以下关系:

dip/pixel = dpi/160 => dip = dpi*pixel/160=> px = dp * (dpi / 160)  当dpi=160时   dip=px

屏幕对角线的长度代表手机的尺寸。

dpi(dot per inch) 表示每英寸像素点有多少,也可以认为是每英寸像素密集度,我们所说的density其实是dpi的估算值,比如165的dpi认为是160的density。

       基准线是160dpi

wps_clip_image-23735

dpi计算:

比如:计算WVGA(800*480)分辨率,3.7英寸的密度DPI,如图1所示

图1

Diagonal pixel表示对角线的像素值(=),DPI=933/3.7=252

 

根据上面的计算方案,下面计算得出:

QVGA(240X320)                2.7inch   148dpi    ldpi

HVGA(320x480)                3.2inch   180dpi    mdpi

QVGA(ADP2)(320X480)     3.2inch   180dpi    mdpi

WQVGA(240x400)            3.3inch   141dpi    ldpi

WQVGA(240x432)             3.4inch   145dpi    ldpi

FWQVGA(480x854)           3.7inch   265dpi    hdpi

WXGA(1280x720)              4.7inch   312dpi    xhdpi

WVGA(480x800)                5.1inch   183dpi    mdpi

FWVGA(480x854)               5.4inch   181dpi    mdpi

Nexus One(480x720)         3.7inch   270dpi    hdpi

Nexus S(480x800)               4.0inch   233dpi    hdpi

从上可见,dpi是由屏幕分辨率和屏幕尺寸一起决定的。

为不同的语言和硬件创建资源:

利用目录结构描述,你可以为指定的语言、地点、硬件配置创建不同的资源。在运行时,安卓利用它自己的动态选择机制动态选着这些值。

在res文件夹内,你可以通过使用一个平行的目录结构指定可选择的资源值。连字符“-”被用来分离指定条件的修饰符。

先举个跨语言的例子:

res/ 
   values/ 
     strings.xml 
   values-fr/   法国人 
     strings.xml 
   values-fr-rCA/  法裔加拿大人 
     strings.xml

下面列出可用的资源值修饰符

1.Mobile Country Code(MCC 移动国家编码) 和 Mobile Newwork Code(MNC 移动网络编码)

国家和可选择的网络取决于你当前所使用的SIM卡,MCC:mcc+3个代表国家的数字编码,MNC:mnc+2个代表网络的数字编码,举个例子:mcc234-mnc20,你可以找到这些编码在http://en.wikipedia.org/wiki/MobileNetworkCode.

2.语言和区域

语言根据ISO 639-1 指定2个小写字母作为代表,紧接着可选择的区域先以r开头(region)然后根据ISO 3166-1-alpha-2 语言编码,也是2个字母不过是大写,还是举个例子吧:

en(英语),en-rUS(美国英语),en-rGB(GB不知道是哪个国家~。~,大家可以去查找通过维基百科)

3.最小的屏幕宽度

以sw<Dimention value>dp的格式(比如sw600dp,sw320dp…)来指定最小的设备尺寸(宽和高)。那为什么说是最小屏幕宽度?考虑到横竖屏,实质就是宽高的较小值。

用在提供多个布局,安卓选择最接近但是不超过当前屏幕尺寸。

4.有效的屏幕宽度

以w<Dimention value>dp 来表示最小的设备屏幕宽度,比如:w600dp,w320dp,w720dp等,同样也是为了支持多个布局选择,不同于最小的屏幕宽度,有效的屏幕宽度

它跟当前的屏幕宽度做对比(比如当前是横屏的屏幕宽度),安卓选择最接近但是不超过当前屏幕尺寸。

5.有效的屏幕高度

与有效的屏幕宽度类似,表示方法以h<Dimension value>dp.

6.屏幕尺寸

实用大致对照表:

屏幕             宽度          高度           尺寸               大小        密度        
Type           (Pixels)     (Pixels)   Range (inches)     Size         Group 
QVGA            240          320        2.6 - 3.0            Small       Low 
WQVGA         240          400        3.2 - 3.5           normal     Low 
FWQVGA       240          432        3.5 - 3.8           normal     Low 
HVGA            320          480        3.0 - 3.5           normal     Medium 
WVGA           480          800        3.3 - 4.0           normal     High 
FWVGA         480          854        3.5 - 4.0           normal     High 
WVGA           480          800        4.8 - 5.5            large       Medium 
FWVGA         480          854         5.0 - 5.8           large       Medium

大约 2~3 inch 为 small, 3~4 inch 为normal,4~6inch 为large, 大于6为xlarge

因为每个屏幕类型都有不同的尺寸(比如QVGA可能有2~3个尺寸),在平板电脑里更常见,比较好的方式是用前面提到的最小的屏幕宽度和有效的屏幕宽度(高度)来更精确的指定,安卓在检测layout的修饰符,会优先考虑后者。

7.屏幕的方向

port(portrait)、land(landscape)、square(square)

8.Dock Mode 所谓的底座模式?

car(行车模式)、desk (断开底座)

9.Night Mode

这个用来指定是否是夜间模式,night或者notnight,以此我们可以修改一个theme或者color theme来达到效果

10.屏幕像素密度(dpi)

最佳实践方式:给ldpi(120dpi),mdpi(160dpi),hdpi(240dpi),xhdpi(320dpi) 都指定对应的图片资源。

然而你也可以指定nodpi表示不去适配dpi。同样安卓也是选择最接近当前设备dpi的Drawables文件夹。

11.触屏类型

notouch、stylus、finger

12.键盘有效性

One of keysexposed, keyshidden, or keyssoft.

13.键盘输入类型

One of nokeys, qwerty, or 12key.

14.导航键有效性

One of navexposed or navhidden.

15.UI导航类型

nonav,dpad,trackball,wheel

16.平台版本

target API Level,  以v<API level>  比如v7. 用来限制资源只能跑在指定API或者更高的设备上。

你可以为任何资源指定多个修饰符,然后以- 分开,任何混合写法都是支持的,但是只能是上面列出的修饰符,还有一点就是每种修饰符只能出现1次。

合法的

         layout-large-land 
         layout-xlarge-port-keyshidden 
         layout-long-land-notouch-nokeys

非法的

         values-rUS-en (out of order) 
         values-rUS-rUK (multiple values for a single qualifier)

注意:安卓如果找不到合适的资源文件夹将会报错,所以通常你需要指定一个默认的文件夹(没有任何修饰符的)。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值