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?
好了,开始本节的内容吧!
/** * 该工具类用于: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); } }
答:在上一节我们已经知道了屏幕密度dpi这个概念了,虽然相同尺寸的手机,但是他们的
dpi可能会不同,dpi是单位长度里面的像素点的数目,那么,dpi较小的手机,像素点的就会
比dpi大的手机的像素点大,那么如果我们使用px的话,dpi大的手机可能显示是正常的,
但是dpi较小的手机可能会出现错位,界面与预期效果相差甚远,还可能超出边界!px可以
理解为物理像素,而dp则是虚拟像素,使用dp可以解决上述这些问题,所以我们还是习惯
布局的时候使用dp的!!!
参考文献:
http://www.cnblogs.com/yaozhongxiao/archive/2014/07/14/3842908.html
原文地址:http://blog.csdn.net/coder_pig/article/details/42192811