【Android学习】尺寸单位 px in mm pt dp sp

一、Android中支持的尺寸单位

    下面用表格的方式将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   }
原文地址:https://www.cnblogs.com/zhangjiawei/p/Size.html