屏幕适配

理论知识:

1.常用单位

px:pixel像素

in:inch英寸

mm:毫米

pt:1/72英寸

dpi:一英寸长的直线上的像素点的数量,即像素的密度

dp(dip) : Density-independent pixel //密度无关像素,定义为160dpi的屏幕下,1个像素点的长度

 sp : Scale-independent Pixels //专用于设定文字大小,和dp类似,但是它除了受到dpi影响,还受到用户的字体偏好设定影响

 屏幕的物理尺寸:屏幕对角线的长度,以inch为单位

 分辨率: 屏幕上长宽方向上像素点的数量, 例A80为全高清屏,即1080*1920的分辨率// 也称为相对分辨率(使用这种说法的人认为,dpi才是真正的分辨率)

 android.util.TypedValue类提供了一个函数,支持把所有的单位换算到px,实现代码如下:

public static float applyDimension(int unit, float value,  
                                   DisplayMetrics metrics)  
{  
    switch (unit) {  
    case COMPLEX_UNIT_PX:  
        return value;  
    case COMPLEX_UNIT_DIP:  
        return value * metrics.density;  
    case COMPLEX_UNIT_SP:  
        return value * metrics.scaledDensity;  
    case COMPLEX_UNIT_PT:  
        return value * metrics.xdpi * (1.0f/72);  
    case COMPLEX_UNIT_IN:  
        return value * metrics.xdpi;  
    case COMPLEX_UNIT_MM:  
        return value * metrics.xdpi * (1.0f/25.4f);  
    }  
    return 0;  
}  

 

手机分辨率主流有4种,

480*854,MDPI;

960*540,HDPI;

1280*720,XHDPI;

1080*1920,XXHDPI;

 

android对于不同的屏幕给出的适配方案是dp,dp单位的显示效果与dpi无关;

以MDPI为基准,1dp=1px;

HDPI,1dp = 1.5px;

XHDPI,1dp = 2px;

XXHDPI,1dp = 3px;

所以,px = dp * scale ;

scale由设备的pixel密度决定;

 

使用dp来适配所有的屏幕是不现实的,

1.呈现效果仍后有差异,仅仅是相近而已;

2.当设备的物理尺寸存在差异时,dp就显得无能为力;

 

解决办法:

根据属性来资源适配机制,即根据不同平台的参数进行针对性的适配,系统会根据设备的具体参数,根据资源文件的属性筛选出最合适的资源;

apk中提供的资源包括animator,anim,color,drawable,layout,menu,raw,values,xml这几种。这些资源保存在res文件下的对应文件夹中。每个文件夹的名字都可以用多种属性来修饰,以便系统在使用过程中根据设备的具体情况来使用不同的资源;

不同的属性以"-"连接,以优先级从高到低的方式排列(否则编译错误),形式如下:

资源名-属性1-属性2...

以下是几种常用的属性:

Language and region:指定区域和多国语言,多国语言最常用的属性,例如en,en-rUS;

Screen size:用来指定屏幕大小,包含这些值,small(基本在3.2寸以上),normal(基本在3.3寸以上),large(基本在5.0寸以上),xlarge(基本在7.5寸以上);

Screen orientation:屏幕方向,值为port或者是land;

Screen pixel density:最常用的属性,值包括,ldpi,mdpi,hdpi,xhdpi,xxhdpi,nodpi,tvdpi。其中,nodpi是开发者不希望系统对图片进行缩放的情况;

Platform version:值为v<version numble>,例如v15的属性修饰的资源;

Available width:值为w<numble>dp,例如适配640dp宽度的设备:w640dp;

Available height:值为h<numble>dp,例如适配640dp高度的设备:h640dp;

指定分辨率,如:800*480;这种方式请注意,某些手机没有实体按键,而是采用了虚拟按键,此时,app所有的尺寸小于设备的屏幕大小,例如某一款手机的分辨率是1280*720,实际上它只能适配1190*720;

转载于:https://my.oschina.net/u/3491256/blog/908465

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值