目录结构

  • 目录结构
  • 前言
  • 度量单位含义
  • 换算规则

前言

在分辨率没有牛逼到爆的过去,程序员通常以像素为单位设计计算机用户界面。例如,图片大小为80×32像素。这样处理的问题在于,如果在一个每英寸像素点数更高的新显示器上运行该程序,则用户界面图标会显得很小。在有些极端情况下,用户界面会小到难以看清内容。因为我们在Android应用程序开发中应使用与分辨率无关的度量单位。

Android支持dp、sp、px、pt等各种度量单位,下面介绍一下它们的概念和区别。

度量单位含义

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

换算规则

这里的换算规则主要是介绍px、dp、sp的换算规则。
从UI设计师和开发工程师的角度理解:

px(像素)是UI设计师在PS里使用的,同时也是手机屏幕上所显示的。
dp是开发工程师写layout的时候使用的尺寸单位,sp是开发写layout时关于字体的字号单位,且dp与sp总为1:1关系。

所以,UI设计师给出效果图时,标记的单位如果是dp或者sp,开发工程师就可以直接写Layout布局xml文件了。但是,如果UI设计师给出的单位是像素(px),那苦逼的开发工程师就要自行换算了。

在了解具体的换算规则之前,我先介绍一个概念,像素密度。
假设有一部手机,屏幕的物理尺寸为1.5英寸*2英寸,屏幕分辨率为240*320,则我们可以计算出在这部手机的屏幕上,每英寸包含的像素点的数量为240/1.5=160dpi(横向)或320/2=160dpi(纵向),160dpi就是这部手机的像素密度,像素密度的单位dpi是Dots Per Inch的缩写,即每英寸像素数量。横向和纵向的这个值都是相同的,原因是大部分手机屏幕使用正方形的像素点。

由于不同的手机或平板有不同的像素密度,而开发人员不可能为每款不同像素密度的手机开发相同的应用,因此Android想到了这点,Android系统本身定义了六种像素密度:

低(120dpi)、中(160dpi)、高(240dpi)、超高(320dpi)、超超高(480dpi)

由于在160dpi像素密度的情况下:px = dp,当在其他像素密度时,pxe和dp的换算规则是: dp=(int)(px/1.5+0.5)
因为,在低、中、高、超高、超超高像素密度下,dp到px的换算系数分别为:

低(0.75)、中(1)、高(1.5)、超高(2)、超超高(3)

有了这个换算系数后,那假设UI设计师在在超高像素密度(xh)的手机上给你200px像素值宽度时,那你写在xml里对应的dp应该为:100dp
dp和px的代码转换方法如下:

public static int dpTopx(Context context, float dpValue){    final float scale = context.getResources().getDisplayMetrics().density;    return (int)(dpValue * scale + 0.5f);}public static int pxTodp(Context context, float pxValue){    final float scale = context.getResources().getDisplayMetrics().density;    return (int)(pxValue / scale + 0.5f);}

更多相关文章

  1. Android(安卓)UI总结 Android(安卓)和H5 字体大小适配
  2. 探究Android的多分辨率支持以及各种类型图标尺寸大小
  3. Android简易实战教程--第二十八话《加载大图片》
  4. android 中.9图片的用法 详解
  5. Android中Bitmap内存占用分析
  6. Android(安卓)窗帘(Curtain)效果二之波浪式动态扭曲效果
  7. 《Android群英传》读书笔记(6)第六章:Android绘图机制与处理技巧之
  8. Android实时获取音量(单位:分贝)
  9. Android(安卓)screen size and densities.

随机推荐

  1. 在Android平台上加载本地库的危险性
  2. Android 蓝牙难点总结
  3. android网络抓包相关
  4. DataBinding绑定android:onClick出错
  5. Android中短信的广播接收问题
  6. Android中定义接口的用法
  7. android 处理双击事件
  8. 找不到R.java 解决方法
  9. Android的APK文件反编绎
  10. Android(安卓)Studio 无法引用org.apache