New UI-常用计量单位px,dp,sp,pt解析与转换

New UI-常用计量单位px,dp,sp,pt解析与转换

           ——转载请注明出处:coder-pig,欢迎转载,请勿用于商业用途!


小猪Android开发交流群已建立,欢迎大家加入,无论是新手,菜鸟,大神都可以,小猪一个人的

力量毕竟是有限的,写出来的东西肯定会有很多纰漏不足,欢迎大家指出,集思广益,让小猪的博文

更加的详尽,帮到更多的人,O(∩_∩)O谢谢!

小猪Android开发交流群:小猪Android开发交流群群号:421858269

新Android UI实例大全目录:http://blog.csdn.net/coder_pig/article/details/42145907



本节正文:

对于计量单位,我们习惯性地分为:相对单位与绝对单位,从字眼意义我们就可以

猜到,相对是可以根据不同的情景表现出不同的大小,常用的就有:dp,px,sp;

而绝对单位就是我们制定了一个标准,比如mm(毫米),写死了,1mm就那么多,

什么情况下都是那么多,而常用的还有,in(英寸,2.54cm),pt(磅)印刷业常用

单位,1 pt = 1/72 in!于是乎,我们今天要讨论研究的就是相对单位:px,dp,sp;

相信大家对他们也不陌生吧,比如写死一个ImageView的宽高;margin多少个dp

设置偏移;画一条宽1px的view来形成一条直线等等..那么本节就来

1.研究px,dp,sp的概念

2.单位相互转化,写一个简单的工具类

3.布局的时候为什么尽量用dp,而不适用px?

好了,开始本节的内容吧!



1)px,dp,sp的概念:





2)单位相互转化,写一个简单的工具类

  1. /** 
  2.  * 该工具类用于:px,dp,sp的相互转化 
  3.  * @author coder-pig 
  4.  * */  
  5.   
  6. public class DisplayUtil {  
  7.       
  8.     //1.px转dp   
  9.     public static int px2dip(Context context, float pxValue) {   
  10.         final float scale = context.getResources().getDisplayMetrics().density;   
  11.         return (int) (pxValue / scale + 0.5f);   
  12.     }   
  13.      
  14.     //2.dp转px   
  15.     public static int dip2px(Context context, float dipValue) {   
  16.         final float scale = context.getResources().getDisplayMetrics().density;   
  17.         return (int) (dipValue * scale + 0.5f);   
  18.     }   
  19.      
  20.    //3.px转sp   
  21.     public static int px2sp(Context context, float pxValue) {   
  22.         final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;   
  23.         return (int) (pxValue / fontScale + 0.5f);   
  24.     }   
  25.      
  26.     //4.sp转px   
  27.     public static int sp2px(Context context, float spValue) {   
  28.         final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;   
  29.         return (int) (spValue * fontScale + 0.5f);   
  30.     }   
  31.   
  32. }  
/**
 * 该工具类用于:px,dp,sp的相互转化
 * @author coder-pig
 * */

public class DisplayUtil {
	
	//1.px转dp
	public static int px2dip(Context context, float pxValue) { 
        final float scale = context.getResources().getDisplayMetrics().density; 
        return (int) (pxValue / scale + 0.5f); 
    } 
   
    //2.dp转px
    public static int dip2px(Context context, float dipValue) { 
        final float scale = context.getResources().getDisplayMetrics().density; 
        return (int) (dipValue * scale + 0.5f); 
    } 
   
   //3.px转sp
    public static int px2sp(Context context, float pxValue) { 
        final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; 
        return (int) (pxValue / fontScale + 0.5f); 
    } 
   
    //4.sp转px
    public static int sp2px(Context context, float spValue) { 
        final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; 
        return (int) (spValue * fontScale + 0.5f); 
    } 

}


3.布局的时候为什么尽量用dp,而不适用px?

答:在上一节我们已经知道了屏幕密度dpi这个概念了,虽然相同尺寸的手机,但是他们的

dpi可能会不同,dpi是单位长度里面的像素点的数目,那么,dpi较小的手机,像素点的就会

比dpi大的手机的像素点大,那么如果我们使用px的话,dpi大的手机可能显示是正常的,

但是dpi较小的手机可能会出现错位,界面与预期效果相差甚远,还可能超出边界!px可以

理解为物理像素,而dp则是虚拟像素,使用dp可以解决上述这些问题,所以我们还是习惯

布局的时候使用dp的!!!






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值