Android中px、dp、sp之间相互转换

Advertisement

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。

重要补充

px = (density/160)dp
density一般为3个常用固定值240/160/120
分别对应WVGA/HVGA/QVGA
不知道知己做的分辨率对应的density是多少可以点击AVD Manager里新建一个模拟器或者选择已有的模拟器点details就可以看到了(1.6以上包括1.6才可以查)
补充:dp跟dip是一样的,但px跟dp(dip)绝对不一样,唯一的情况只有在HVGA分辨率下才是一样,因为HVGA分辨率对应density为160,与除数一样,所以做的时候才会没感觉到差别

推荐一个著名的OJ

http://www.simpleoj.cn

[java] view
plain copy

print?

  1. /** 
  2.  * dp、sp 转换为 px 的工具类 
  3.  *  
  4.  * @author fxsky 2012.11.12 
  5.  * 
  6.  */  
  7. public class DisplayUtil {  
  8.     /** 
  9.      * 将px值转换为dip或dp值,保证尺寸大小不变 
  10.      *  
  11.      * @param pxValue 
  12.      * @param scale 
  13.      *            (DisplayMetrics类中属性density) 
  14.      * @return 
  15.      */  
  16.     public static int px2dip(Context context, float pxValue) {  
  17.         final float scale = context.getResources().getDisplayMetrics().density;  
  18.         return (int) (pxValue / scale + 0.5f);  
  19.     }  
  20.   
  21.     /** 
  22.      * 将dip或dp值转换为px值,保证尺寸大小不变 
  23.      *  
  24.      * @param dipValue 
  25.      * @param scale 
  26.      *            (DisplayMetrics类中属性density) 
  27.      * @return 
  28.      */  
  29.     public static int dip2px(Context context, float dipValue) {  
  30.         final float scale = context.getResources().getDisplayMetrics().density;  
  31.         return (int) (dipValue * scale + 0.5f);  
  32.     }  
  33.   
  34.     /** 
  35.      * 将px值转换为sp值,保证文字大小不变 
  36.      *  
  37.      * @param pxValue 
  38.      * @param fontScale 
  39.      *            (DisplayMetrics类中属性scaledDensity) 
  40.      * @return 
  41.      */  
  42.     public static int px2sp(Context context, float pxValue) {  
  43.         final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;  
  44.         return (int) (pxValue / fontScale + 0.5f);  
  45.     }  
  46.   
  47.     /** 
  48.      * 将sp值转换为px值,保证文字大小不变 
  49.      *  
  50.      * @param spValue 
  51.      * @param fontScale 
  52.      *            (DisplayMetrics类中属性scaledDensity) 
  53.      * @return 
  54.      */  
  55.     public static int sp2px(Context context, float spValue) {  
  56.         final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;  
  57.         return (int) (spValue * fontScale + 0.5f);  
  58.     }  
  59. }  

Similar Posts:

  • Android dip,px,pt,sp 的区别

    [转载]Android dip,px,pt,sp 的区别 dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不依赖像素. px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多.        pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用:        sp: s

  • 转:关于android中px,dip,dp,sp等单位

    Android的layout文件中有时候可能会指定具体的单位,比如有时候为px.dip或者sp等.他们的区别如下: 1. px (pixels)像素:这个大家用得比较多, 一般我们HVGA代表320x480像素. 2. dip或dp (device independent pixels)设备独立像素:这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA cwj推荐使用这个,不依赖像素. 在android上开发的程序将会在不同分辨率的手机上运行.为了让程序外观不至于相差太大,所以引入了

  • 形象讲解Android中dpi,dp和px之间的关系(设计师如何与程序员沟通)

    屏幕尺寸指屏幕(显示屏)对角线的长度,单位为英寸.dpi(dots per inch 像素密度)指每英寸中的像素数. (1)在android中,160dpi设备下,1px = 1dp,160dpi表示一英寸中包含160个像素点(px),即把一英寸平均分成160个单元格,每个单元格就有一个像素.如果我们把这160个单元格的单位设为dp,则1dp=1px; (2)假设我的设备的分辨率为1080*1920,尺寸为5英寸,则我的设备的像素密度为,即一英寸中包含440个像素点(px),如果把一英寸平均分成

  • Android中px与dip,sp的转化

    我们在页面布局的时候,经常会设置容器的长度,但是到底该使用哪个作为长度的单位而懊恼.在Android中支持的描述大小区域的类型有以下几种: px(pixels)--像素:不同的设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多. dip(device independent pixels)--设备独立像素:这个和设备硬件有关,一般我们为了支持WCGA.HVGA和QVGA推荐使用这个,不依赖于像素.等同于dp.转化需要屏幕的精度density density(DisplayM

  • Android中dpi,dp(dip),px关系,与计算公式

    Android Developers关于dp的文档我看过N次,那个px和dp的转换公式我记得很清楚: px = dp * (dpi / 160),可是今天翻了源码了才发现,原来这里的dpi是归一化后的dpi,可能值只有120(low).160(medium).240(high). 320(xhigh)四种,而我之前理解的竟然是实际设备真实的dpi! px 与 dp, sp换算公式? PPI = Pixels per inch,每英寸上的像素数,即 "像素密度" xhdpi: 2.0 h

  • 【转载】Android dip,px,pt,sp 的区别

    dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不依赖像素. px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多. pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用: sp: scaled pixels(放大像素). 主要用于字体显示best for textsi

  • Android中px、dip、sp的使用

    第一篇技术博客,个人断断续续自学Android也有有一段时间,一直想写一些技术博客作为自己学习的记录,同时也可以帮助像我一样自学的朋友.那就从今天开始,我会将我自己 遇到的问题尽量写成文档作为 日后的参考. 在页面布局的时候长度单位是我们必然会使用和接触到的.主要有一下 几种类型:px.dip.sp. px是像素,屏幕上的点.不同设备显示出的效果是一样的. dip是设备独立像素,不同设备有不同的显示效果,不依赖于像素 . sp是放大像素,主要用于字体显示,google建议TextView的字号最

  • android中px、dp、dip以及屏幕密度

    1. dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这    这个,不依赖像素.     这里要特别注意dip与屏幕密度有关,而屏幕密度又与具体的硬件有关,硬件设置不正确,有可能导致dip不能正常显示.在屏幕密度为160的显示屏上,1dip=1px,有时候可能你的屏幕分辨率很大如480*800,但是屏幕密度没有正确设置比如说还是160,那么这个时候凡是使用dip的

  • 笔记整理-px和dp,px和sp之间的转换

    public int dp2px(int dpVal) { return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpVal, getResources().getDisplayMetrics()); } public int sp2px(int spVal) { return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, spVal, ge

  • px,dp,sp与屏幕适配

    px 像素点 在不同的设备中,像素点代表的大小是不同的. dp 像素密度 单位英尺内存在的像素数目,与px之间的存在着系数的转化关系.正常情况下 如果手机是160dp 则按照1:1 转换 . 当然,还有系数为0.75 1.5 2 等转换比例. 如果要在不同的手机中呈现出相同的效果,可以在不同分辨率的drawable文件中对同一个尺寸引用根据比例设置不同的值. sp与dp相似,只不过在使用文字的时候,可以自定义文字的大小,所以所呈现出来的效果不同. Android用两种常规的属性来分类设备屏幕:即

Tags: