平时在xml里书写控件大小时,我们习惯于使用dp值,但是,如果使用Java代码书写控件:
WindowManager.LayoutParams layoutParams =
getWindow().getAttributes();
layoutParams.height= 200;
layoutParams.width= 200;
getWindow().setAttributes(layoutParams);
运行的结果并不是我们预期的大小,这是因为在LayoutParams使用的参数单位是pixels。
不可避免的就需要我们转换dp 到 pixels 。
转换的函数如下:
private int getPixelsFromDp(int size){
DisplayMetrics metrics =new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
return(size * metrics.densityDpi) /
DisplayMetrics.DENSITY_DEFAULT;
}
首先查看官方文档,DisplayMetrics是安卓提供的封装像素密度以及大小信息的类。前两行代码是对他的初始化。当获取了当前手机的手机密度信息后根据下面的公式。
px = dp * (dpi / 160)
只需要计算它和默认像素密度的比值乘以像素就是我们常用的dp值了。
其中 DisplayMetrics.DENSITY_DEFAULT 的值就是160