网上关于这类的资料很多,本人把常用的一些方法整理出来,方便大家一起使用
关于获得手机分辨率和像素密度
方法1.
int dp = Resources.getSystem().getDisplayMetrics().densityDpi;//像素密度
int widthPixels = Resources.getSystem().getDisplayMetrics().widthPixels;//屏幕宽度
int heightPixels = Resources.getSystem().getDisplayMetrics().heightPixels;//屏幕高度
方法2.
WindowManager manager = this.getWindowManager();
DisplayMetrics outMetrics = new DisplayMetrics();
manager.getDefaultDisplay().getMetrics(outMetrics);
int windowsDp = outMetrics.densityDpi;//像素密度
int windowsWidth = outMetrics.widthPixels;//屏幕宽度
int windowsHeight = outMetrics.heightPixels;//屏幕高度
dp转化成px
方法1.
/**这个是android本身自带的方法,TypedValue.applyDimension()方法第一个参数可以设置dp、sp等其他转化单位*/
public static int dpToPx(Context context,int dp) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());
}
/**查看源码可以看到,里面有很多的单位的选择*/
public static float applyDimension(int unit, float value,
DisplayMetrics metrics)
{
switch (unit) {
case COMPLEX_UNIT_PX:
return value;
case COMPLEX_UNIT_DIP:
return value * metrics.density;
case COMPLEX_UNIT_SP:
return value * metrics.scaledDensity;
case COMPLEX_UNIT_PT:
return value * metrics.xdpi * (1.0f/72);
case COMPLEX_UNIT_IN:
return value * metrics.xdpi;
case COMPLEX_UNIT_MM:
return value * metrics.xdpi * (1.0f/25.4f);
}
return 0;
}
方法2.
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
*/
public static int dip2px(Context context, float dip) {
float density = context.getResources().getDisplayMetrics().density;
return (int) (dip * density + 0.5f);
}
px转化成dp
/**
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}