px、dp与sp的区别以及换算
1、px
  即像素,1px代表屏幕上的⼀个物理像素点。
2、dp
  dip:device independent pixels(设备独⽴像素),dp与dip⼀样,不同的设备有不同的显⽰效果,⼀般为了⽀持WVGA、HVGA和QVGA推荐使⽤这个,不依赖像素。
3、sp
  sp:scale-independent pixels(缩放独⽴像素),与缩放⽆关的抽象像素,它和dp很相似,但唯⼀的区别在于,Android系统允许⽤户⾃定义⽂字尺⼨⼤⼩(⼩,正常,⼤,超⼤等),当⽂字尺⼨是“正常”时,1sp=1dp=0.00625inch(英⼨),当⽂字尺⼨是“⼤”或“超
⼤”时,1sp>1dp=0.00625inch
4、dpi
  dpi:dots per inch(每英⼨点数,或者说每英⼨像素数⽬更易懂),由设备决定,是写死的,可以通过
  dpi=横向分辨率/横向英⼨数=纵向分辨率/纵向英⼨数
Google 规定的屏幕密度列表:
ldpi (low) ~120dpi
mdpi (medium) ~160dpi
hdpi (high) ~240dpi
xhdpi (extra-high) ~320dpi
xxhdpi (extra-extra-high) ~480dpi
xxxhdpi (extra-extra-extra-high) ~640dpi
__________________________________________________________________________________
一般使用的分辨率的显示密度是多少dpidp与px
px=dp*(dpi/160)
dp=px/(dpi/160)
sp与px
px=sp*(dpi/160)
sp=px/(dpi/160)
_____________________________________________________________________________
获取DisplayMetrics对象⽅法:
DisplayMetrics dm=new DisplayMetrics();
//获得DisplayMetrics对象⽅法⼀
//Resources().getDisplayMetrics();
/
/获得DisplayMetrics对象⽅法⼆
((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(dm);
px转其他单位代码:(该⽅法来⾃TypedValue)
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;
}
另外⼀种px转dp的代码:
/**
* 根据⼿机的分辨率从 px(像素) 的单位转成为 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = Resources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
dp转px:
/**
* 根据⼿机的分辨率从 dp 的单位转成为 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = Resources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
参考⾃:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。