一、Android中支持的尺寸单位
下面用表格的方式将Android中支持的尺寸单位列举,供大家参考:
单位表示 | 单位名称 | 单位说明 |
px | 像素 | 屏幕上的真实像素表示 |
in | 英尺 | 基于屏幕的物理尺寸表示 |
mm | 毫米 | 基于屏幕的物理尺寸表示 |
pt | 点 | |
dp | 和精度无关的像素 | 相对屏幕物理密度的抽象单位 |
sp | 和精度无关的像素 | 类似于dp |
二、关于dp与sp的说明
这里需要说明一下dpi的概念,他就是说明屏幕上一英寸里面有多少个像素点,这就是这里所谓的Density密度。dp的密度无关也就是排除各种屏幕dpi不同而导致的显示规格不同,sp是在dp的基础上还与scale无关,这里的scale应该是指的是屏幕大小,也就是平常所说的几寸几寸屏。
如果屏幕密度为160,这时dp和sp和px是一样的。1dp=1sp=1px,但如果使用px作单位,如果屏幕大小不变(假设还是3.2寸),而屏幕密度变成了320。那么原来TextView的宽度设成160px,在密度为320的3.2寸屏幕里看要比在密度为160的3.2寸屏幕上看短了一半。但如果设置成160dp或160sp的话。系统会自动将width属性值设置成320px的。也就是160 * 320 / 160。其中320 / 160可称为密度比例因子。
如果使用dp和sp,系统会根据屏幕密度的变化自动进行转换。所以在我们的应用程序中,提倡使用sp、dp来适应各种不同的屏幕。
三、dp(或dip)和px互相转换:
下面列出Android开发中常用的dp(或dpi)和px互相转换的方法,仅供读者参考:
1 /** 2 * 根据手机的分辨率从dp(或dip)转换成px 3 */ 4 public static int dip2px(Context context, float dpValue) { 5 final float scale = context.getResources().getDisplayMetrics().density; 6 return (int) (dpValue * scale + 0.5f); 7 } 8 9 /** 10 * 根据手机的分辨率从px转换成dp(或dip) 11 */ 12 public static int px2dip(Context context, float pxValue) { 13 final float scale = context.getResources().getDisplayMetrics().density; 14 return (int) (pxValue / scale + 0.5f); 15 }