dp sp px换算代码

81 篇文章 3 订阅

dp(dip): device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。
dp也就是dip,这个和sp基本类似。如果设置表示长度、高度等属性时可以使用dp 或sp。但如果设置字体,需要使用sp。dp是与密度无关,sp除了与密度无关外,还与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,系统会根据屏幕密度的变化自动进行转换。
px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。
pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用;
sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。

“`
dp(dip): device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。
dp也就是dip,这个和sp基本类似。如果设置表示长度、高度等属性时可以使用dp 或sp。但如果设置字体,需要使用sp。dp是与密度无关,sp除了与密度无关外,还与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,系统会根据屏幕密度的变化自动进行转换。
px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。
pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用;
sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。

转换代码如下

[java] view plaincopy

/**
 * dp、sp 转换为 px 的工具类
 * 
 * @author fxsky 2012.11.12
 *
 */ 
public class DisplayUtil { 
    /**
     * 将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); 
    } ```

以下是另一篇写的很详细的博客,借以参考,原文地址

PPI = Pixels per inch,每英寸上的像素数,即 “像素密度”

xhdpi: 2.0
hdpi: 1.5
mdpi: 1.0 (baseline)
ldpi: 0.75

drawable-ldpi、drawable-mdpi、drawable-hdpi 精度分别为低、中(android默认)、高。
对应的图片大小为:36x36、48x48、72x72。

xxhdpi: 144*144
xhdpi:96*96
hdpi:72*72
mdpi:48*48
ldpi:36*36

dp是虚拟像素,在不同的像素密度的设备上会自动适配,比如:
在320x480分辨率,像素密度为160,1dp=1px
在480x800分辨率,像素密度为240,1dp=1.5px
计算公式:1dp*像素密度/160 = 实际像素数

drawable- hdpi、drawable- mdpi、drawable-ldpi的区别:
(1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA (480x854)
(2)drawable-mdpi里面存放中等分辨率的图片,如HVGA (320x480)
(3)drawable-ldpi里面存放低分辨率的图片,如QVGA (240x320)
系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。

ppi的运算方式是:

PPI = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数

dp:Density-independent pixels,以160PPI屏幕为标准,则1dp=1px,

dp和px的换算公式 :
dp*ppi/160 = px。比如1dp x 320ppi/160 = 2px。

sp:Scale-independent pixels,它是安卓的字体单位,以160PPI屏幕为标准,当字体大小为 100%时, 1sp=1px。

sp 与 px 的换算公式:sp*ppi/160 = px

总结得出:

px = dp*ppi/160
dp = px / (ppi / 160)

px = sp*ppi/160
sp = px / (ppi / 160)

dp = sp?

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在安卓中,dp(也称为dip)是一个抽象单位,用于表示长度和距离,它会随着屏幕密度的变化而变化,而px则是像素单位,用于表示屏幕上的实际像素数量。在不同屏幕密度的设备上,dppx之间的换算比例不同。 通常情况下,可以使用以下公式进行dppx之间的换算: ``` px = dp * (dpi / 160) ``` 其中,dpi是屏幕的像素密度,160是基准密度,即在密度为160dpi的屏幕上,1dp等于1px。 举个例子,假设你有一个长度为10dp的视图,在240dpi的屏幕上,它应该有多少像素呢? 根据公式: ``` px = 10 * (240 / 160) = 15 ``` 因此,在240dpi的屏幕上,长度为10dp的视图应该有15个像素。 注意,这只是一个近似值,实际的像素数可能会有细微的差异。在开发应用程序时,建议使用dp作为单位,以确保应用程序在不同密度的设备上具有一致的外观。 ### 回答2: 在安卓开发中,我们经常需要进行屏幕适配,以确保在不同的设备上显示效果一致。这时候就需要用到dppx换算dp(密度独立像素)是一种基于物理尺寸的单位,而px(像素)是屏幕上的实际像素点,其数值与设备的屏幕密度成正比。因此,不同设备上的1dp可能对应不同数量的像素。 在进行换算时,需要知道当前设备的屏幕密度,一般可以通过获取DisplayMetrics中的density值来获得。设备像素与dp之间的换算公式为: px = dp * density 这个公式可以通过以下方法在代码中使用: ```java float density = getResources().getDisplayMetrics().density; int px = (int) (dp * density); ``` 其中,dp是需要转dp值,px是转后的像素值。需要注意的是,由于px为整数值,所以最后结果需要进行取整操作。 反之,如果想将像素值pxdp单位,可以使用以下公式: dp = px / density 同样地,可以通过以下方法在代码中进行转: ```java float density = getResources().getDisplayMetrics().density; int dp = (int) (px / density); ``` 这样就可以在安卓开发中灵活地进行dppx单位之间的换算,以便实现屏幕适配。 ### 回答3: 在安卓系统中,dp(密度无关像素)和px(像素)是两种常见的单位用于测量屏幕上的元素大小。由于不同的设备具有不同的屏幕密度,使用dp单位可以使应用在不同设备上呈现一致的大小。 换算dppx之间的值非常简单,可以通过以下公式进行计算: px = dp * (dpi / 160) 其中dpi代表设备的屏幕密度,通常以dpi作为单位进行表示。在大多数情况下, dpi值可以通过代码获取。 例如,假设我们有一个布局元素,其宽度设置为100dp。我们想要计算在特定设备上对应的像素值。如果该设备的dpi为320,那么计算如下: px = 100 * (320 / 160) px = 200 因此,该布局元素在该设备上的宽度将为200像素。 这个换算公式不仅适用于计算宽度,还适用于计算高度、字体大小等。通过将尺寸设置为dp单位,并使用上述公式进行换算,可以确保应用在不同设备上具有一致的显示效果。这在构建适应性强的应用程序时非常有用,使应用在不同设备上看起来更加美观和一致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值