1.px

px即像素 (Pixel),1px代表了手机屏幕上一个物理的像素点。由于以px为单位的控件在不同手机上显示大小不一定相同,故Android不推荐使用px来设置控件大小:

2.分辨率

分辨率通常表示为横轴像素长度和纵轴像素长度的乘积,如320X480等。

3.dpi

dpi的全称是Dots Per Inch,即点每英寸,一般被称为像素密度,它代表了一英寸里面有多少个像素点。计算方法为屏幕总像素点(即分辨率的乘积除以屏幕大小),常见的取值有120,160,240。

4.density

density直译为密度,它的计算公式为屏幕dpi除以160点每英寸,由于单位除掉了,故density只是一个比值,常见取值为1.0,1.5等。 在Android中我们可以通过下面代码获取当前屏幕的density:
getResources().getDisplayMetrics().density;

5.dp(dip)

dp,也叫做dip,全称为Density independent pixels,叫做设备独立像素。他是Android为了解决众多手机dpi不同所定义的单位,谷歌官方的解释如下: Density-independent pixel (dp)
  A virtual pixel unit that you should use when defining UI layout, to express layout dimensions or position in a density-independent way.
The density-independent pixel is equivalent to one physical pixel on a 160 dpi screen, which is the baseline density assumed by the system for a "medium" density screen. At runtime, the system transparently handles any scaling of the dp units, as necessary, based on the actual density of the screen in use. The conversion of dp units to screen pixels is simple: px = dp * (dpi / 160). For example, on a 240 dpi screen, 1 dp equals 1.5 physical pixels. You should always use dp units when defining your application's UI, to ensure proper display of your UI on screens with different densities.
从上文我们可以看出,dp是一种虚拟抽象的像素单位,他的计算公式为:px = dp * (dpi / 160) = dp * density。因此在dpi大小为160的手机上,1dp = 1px,而在dpi大小为320的手机上,1dp = 2px,即在屏幕越大的手机上,1dp代表的像素也越大。因此我们定义控件大小的时候应该使用dp代替使用px。

6.sp

sp是Android中定义字体大小的一种单位,全称为Scaled Pixels,叫做放大像素。sp会根据用户手机上设定的字体大小而改变,在用户手机字体大小设置为正常的情况下,1sp = 1dp。 sp与px之间的密度比例可以通过如下代码获取:
getResources().getDisplayMetrics().scaledDensity; 

附:dp与px,sp与px转换的代码

public class DisplayUtil {         /**         * 将px值转换为dip或dp值,保证尺寸大小不变         *          */         public static int px2dip(Context context, float pxValue) {             final float scale = context.getResources().getDisplayMetrics().density;             return (int) (pxValue / scale + 0.5f);         }                /**         * 将dip或dp值转换为px值,保证尺寸大小不变         *          */         public static int dip2px(Context context, float dipValue) {             final float scale = context.getResources().getDisplayMetrics().density;             return (int) (dipValue * scale + 0.5f);         }                /**         * 将px值转换为sp值,保证文字大小不变         *          */         public static int px2sp(Context context, float pxValue) {             final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;             return (int) (pxValue / fontScale + 0.5f);         }                /**         * 将sp值转换为px值,保证文字大小不变         *          */         public static int sp2px(Context context, float spValue) {             final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;             return (int) (spValue * fontScale + 0.5f);         }     }


更多相关文章

  1. Android学习笔记之界面控件大小dip及布局管理器嵌套使用
  2. android解决屏幕适配问题
  3. Android各种屏幕适配原理
  4. Android(安卓)模拟器屏幕定制(修改控制器大小)
  5. AndroidStudio mipmap图片大小
  6. dpi、dp、sp、px、mm之间的关系
  7. Android重力感应示例 .
  8. Android获取应用占用空间
  9. android主流屏幕适配方案总结

随机推荐

  1. 什么时候需要标准化回归模型中的变量?
  2. 对数vs线性vs二次vs指数形式,到底选择哪种
  3. 机器学习方法出现在AER, JPE, QJE等顶刊
  4. 万字长文述"家庭经济学"进展, 诺奖得主贝
  5. 过去三十年, RCT, DID, RDD, LE, ML, DSG
  6. 空间双重差分法(spatial DID)最新实证pap
  7. 忽略交互效应后果很严重,审稿人很生气!
  8. 妇女能顶半边天, 关于“中国女性”最新研
  9. grid实现12列栅格布局的组件并且实例圣杯
  10. unity常用方法库 持续跟新