`
zhy20045923
  • 浏览: 153376 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

android资源适配解析及资源适配优先级规则

阅读更多
1.sw的值是怎么计算得来的

sw = width *  DisplayMetrics.DENSITY_DEFAULT / densityDPI

width是指屏幕的宽度

DisplayMetrics.DENSITY_DEFAULT是指google的标准值,一般是160

densityDPI是指屏幕密度(每寸像素数)

计算方法如下:
DisplayMetrics dm = new DisplayMetrics();  
		dm = getResources().getDisplayMetrics();  
		  
		float density  = dm.density;        // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)  
		int densityDPI = dm.densityDpi;     // 屏幕密度(每寸像素:120/160/240/320)  
		float xdpi = dm.xdpi;             
		float ydpi = dm.ydpi;  
		  
		int screenWidth  = dm.widthPixels;      // 屏幕宽(像素,如:480px)  
		int screenHeight = dm.heightPixels;

2.sw的值是如何适配的
sw是指smallest width,就是说最小限度,如你的手机sw计算结果是320,你的资源配置有drawable-sw320dp,drawable-sw600dp,drawable-sw720dp,那么将适配到drawable-sw320dp;如果你的手机sw计算是640,那么将适配到drawable-sw600dp

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

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次。
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics