什么是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值才好。
浙公网安备 33010602011771号