Android尺寸单位总结

Android中常见的尺寸单位有如下几个:

dp(dip)、sp、pt、px、mm、 in 


dp——Density-independent Pixels,也即dip,是一种密度无关的像素单位,它是基于屏幕物理密度的抽象单元。一般认为在密度160dpi(dots per inch,每英寸点数)的设备上,1dp大致等于1px。dp与px并不总是一比一的关系,当密度变大或变小时,dp与px之间便存在一个比例因子,下边会给出一个换算公式。因此在设置width和height时,建议使用dp,它会根据屏幕大小自适应,如果使用px则会导致在不同尺寸屏幕上得到的效果不同。

sp——Scale-independent Pixels,设置字体的大小时建议使用sp,它也可以针对不同屏幕大小作自适应。

pt——Points,它是基于屏幕的物理尺寸的,大小为1英寸的1/72。

px——Pixels,它是屏幕上的实际像素,一般不建议使用px,因为不同屏幕的像素数是不一样的。

mm——Millimeters,指物理尺寸毫米。

in——Inches,指物理尺寸英寸,1英寸=2.54厘米。


dp与px的换算公式:

px = dp * (densityDpi/160)

dp = (px*160)/densityDpi

其中densityDpi——The screen density expressed as dots-per-inch即每英寸的点数,获取方式:context.getResources().getDisplayMetrics().densityDpi;

还可以直接获取比例因子,即scaling factor = context.getResources().getDisplayMetrics().density;  

对应关系为:scaling factor = densityDpi / 160。

参考资料:http://developer.android.com/guide/topics/resources/more-resources.html#Dimension

===========================================================================

一般新建Android工程会生成以下几个资源文件夹:

drawable-ldpi、drawable-mdpi、drawable-hdpi、drawable-xhdpi、drawable-xxhdpi,它们是为了屏幕适配,分别对应着不同的ppi(pixel per inch),跟dpi一个概念。

完整的对应关系:

drawable-ldpi——120ppi——1dp——0.75px(表示如果将1个dp换算成px的话,则是0.75px)

drawable-mdpi——160ppi——1dp——1px(表示如果将1个dp换算成px的话,则是1px)

drawable-hdpi——240ppi——1dp——1.5px(表示如果将1个dp换算成px的话,则是1.5px)

drawable-xhdpi——320ppi——1dp——2px(表示如果将1个dp换算成px的话,则是2px)

drawable-xxhdpi——480ppi——1dp——3px(表示如果将1个dp换算成px的话,则是3px)

===========================================================================

dp、px、sp之间的换算公式如下:

<span style="font-size:14px;">/** 
     * 将px值转换为dip或dp值,保证尺寸大小不变 
     *  
     * @param pxValue 
     * @param scale 
     *            (DisplayMetrics类中属性density) 
     * @return 
     */  
    public static int px2dip(Context context, float pxValue) {  
        final float scale = context.getResources().getDisplayMetrics().density;  
        return (int) (pxValue / scale + 0.5f);  
    }  
  
    /** 
     * 将dip或dp值转换为px值,保证尺寸大小不变 
     *  
     * @param dipValue 
     * @param scale 
     *            (DisplayMetrics类中属性density) 
     * @return 
     */  
    public static int dip2px(Context context, float dipValue) {  
        final float scale = context.getResources().getDisplayMetrics().density;  
        return (int) (dipValue * scale + 0.5f);  
    }  
  
    /** 
     * 将px值转换为sp值,保证文字大小不变 
     *  
     * @param pxValue 
     * @param fontScale 
     *            (DisplayMetrics类中属性scaledDensity) 
     * @return 
     */  
    public static int px2sp(Context context, float pxValue) {  
        final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;  
        return (int) (pxValue / fontScale + 0.5f);  
    }  
  
    /** 
     * 将sp值转换为px值,保证文字大小不变 
     *  
     * @param spValue 
     * @param fontScale 
     *            (DisplayMetrics类中属性scaledDensity) 
     * @return 
     */  
    public static int sp2px(Context context, float spValue) {  
        final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;  
        return (int) (spValue * fontScale + 0.5f);  
    }  </span>






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值