您的位置:首页 > 移动开发 > Android开发

Android中dp和px的转化问题,以及如何获得手机分辨率和像素密度

2017-08-29 10:53 633 查看
网上关于这类的资料很多,本人把常用的一些方法整理出来,方便大家一起使用

关于获得手机分辨率和像素密度

方法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);
}


参考资料http://www.cnblogs.com/jiadongfeng/p/4789892.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android dp