Android多屏幕适配-手机

1、常用单位及其关系

 px:像素

inch:英寸

pt:1/72 英寸

dpi:一英寸长的直线上的像素点的数量,即像素密度。不同的设备,dpi值不同,显示效果不同,dpi的值跟设备硬件有关。标准值是160dp。

dp(dip):独立像素密度。即在标准屏幕下,1个像素点的长度,标准屏幕是160dpi,可以理解为1英寸长度上有160个像素。标准屏幕中1dp=1px。

px = dp*(dpi/160);//当dpi=160时,1px=1dp

分辨率:屏幕上长宽方向上像素点的数量,即一个屏幕上像素的数量。

例如:720*1280 = 屏幕x轴上有720个像素,屏幕y轴上有1280个像素

分辨率单位:dpi(点每英寸)、lpi(线每英寸)、ppi(像素每英寸)

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

sp:专用于设定文字大小,受dpi影响和用户的字体偏好设定影响。

各单位和px的换算关系见TypedValue.applyDimension方法

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;
    }

//显示器
DisplayMetrics d = getResources().getDisplayMetrics();//可以获得scaledDensity,densityDpi,heightPixels,widthPixels等信息。
Configuration configuration = getResources().getConfiguration();//获取设备的配置信息
//configuration.screenHeightDp  当前屏幕可用空间的高度,单位是dp
//configuration.screenWidthDp   当前屏幕可用空间的宽度,单位是dp
//configuration.densityDpi      当前设备的dpi信息

例子:

已知设备1080*1920,使用DisplayMetrics获取的实际信息是1080*1776y轴方向上的像素有误差是因为软键盘,实际屏幕要小。

使用Configuration获取的设备的dpi=480dpi,根据公式px=dp*(dpi/160)

现在px=1080dpi=480,则dp=360.

使用configuration.screenWidthDp得到的数值为360,和上面用公式算出的一致。

但是y轴方向上用公式计算出来的应该是1776/3=592.但是用scrrenHeightDp获取的只有567

 

通过源码验证上述是否成立:

applyDimension方法就是通过输入的任何值转换成px,也就是说,该方法是任何单位和px的换算关系。

COMPLEX_UNIT_DIP 就是dip单位,就是平时说的dp。和px

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值