什么是dp?

dp为安卓中的相对大小

什么是dpi?

dpi 的英文为 dot per inch ,每英寸像素

 

看公式

dpi = px / inch

dp = dpi / 160 = px / 160 * inch = px / density

dp和px之间的联系,取决于具体设备上的像素密度,像素密度就是DisplayMetrics里的density参数。当density=1.0时,表示一个dp值对应一个px值;当density=1.5时,表示两个dp值对应三个px值;当density=2.0时,表示一个dp值对应两个px值。

 

/**  

 * 根据手机的分辨率从 dp 的单位 转成为 px(像素)  。 

 */    

public static int dip2px(Context context, float dpValue) {  

final float scale = context.getResources().getDisplayMetrics().density;  

return (int) (dpValue * scale + 0.5f);  

}  

/**  

 * 根据手机的分辨率从 px(像素) 的单位 转成为 dp 。 

 */    

public static int px2dip(Context context, float pxValue) {  

final float scale = context.getResources().getDisplayMetrics().density;  

return (int) (pxValue / scale + 0.5f);  

}  

 

dp 和 px 使用的场景

xml布局文件中,因为设备无关性,所以除了sp用于设置文字大小外,其余要用大小的地方都是写dp。

但在代码之中,情况又不同,android用于设置大小的函数都是以px为单位。不管是LayoutParams里的width和height,还是setMargins和setPadding,其参数单位都是px,所以要想在代码中使用dp设置布局大小或者间距,得先把dp值转换成px值才好。