android适配(一) 之dp、dip、dpi、px、sp简介及相关换算

android开发中,经常会看到dpdipdpipxsp这些单位,特别是dpsp开发者会经常用到。很多人只是知道用,但是这些单位到底是什么、表示什么意思,相信很多初学者依然是云里雾里。今天就跟大家一起学习下这些单位。

在介绍这些之前首先简单了解下屏幕尺寸。屏幕尺寸是指屏幕对角线长度,单位是英寸,1英寸=2.54厘米


屏幕分辨率:在橫纵向上的像素点数。单位:px1px=1个像素点。

          一般以纵向像素*横向像素表示,如1920*1080

Dpi:屏幕像素密度,指每英寸上的像素点数,dot per inch的缩写,与屏幕尺寸和屏幕分辨率有关

      Nexus5为例,官方参数为1920*1080,dpi=4454.95 inch  那么,这个445dpi是怎么算出来的呢?由上面介绍可知,屏幕尺寸4.95是屏幕对角线的长度,而dpi是指每英寸上的像素点数,所以应该由对角线所占的像素值除以4.95,如下:


px像素,构成图像的最小单位,这个比较简单,无需介绍。

 

dp/dip: dpdip是一样的,密度无关像素,Density Independent Pixels的缩写,以160dpi为基准。在160dpi设备  上1dp=1px,在240dpi设备上1dp=1.5px,以此类推

sp Scale-Independent Pixels,可以根据文字大小首选项进行放缩,常用于设置字体大小。最好使用12sp大小以上的尺寸,推荐使用12sp14sp18sp22sp,尽量避免使用奇数或小数,因为容易造成精度的丢失

 

 

关于dppx之间的换算:

 

public static int dip2px(Context context, float dipValue){   

        final float scale = context.getResources().getDisplayMetrics().density;   

        return (int)(dipValue * scale + 0.5f);   

}   

public static int px2dip(Context context, float pxValue){   

        final float scale = context.getResource().getDisplayMetrics().density;   

        return (int)(pxValue / scale + 0.5f);   

}  

 

这里可能有人要说为什么要加0.5,其实加0.5主要是为了四舍五入,例如 1.1 转换成int是 1 ; 而1.9转换成int 也是1; 所有的数加了0.5后 就可以实现四舍五入了,1.1 + 0.5 = 1.6 -> 1;1.9 + 0.5 = 2.4 -> 2


 

 

 

 

 

 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值