px dpi dp sp density 笔记

2018-08-12  本文已影响0人  迷途之中小书童

public int getDpi(Context context) {
int mDensityDpi;
DisplayMetrics outMetrics = context.getResources().getDisplayMetrics();
mScreenWidth = outMetrics.widthPixels;
mScreenHeight = outMetrics.heightPixels;
mDensity = outMetrics.density;
mXDpi = (int) outMetrics.xdpi;
mYDpi = (int) outMetrics.ydpi;
if (Build.VERSION.SDK_INT > 3) { // Android 1.6以上版本 支持DensityDpi参数
// 计算PPI
final double screenPixLen = Math.sqrt(outMetrics.heightPixelsoutMetrics.heightPixels + outMetrics.widthPixelsoutMetrics.widthPixels);
// 屏幕宽高
final double width = outMetrics.widthPixels / outMetrics.xdpi;
final double height = outMetrics.heightPixels /outMetrics.ydpi;
//屏幕尺寸
final double screenLen = Math.sqrt(widthwidth + heightheight);
mDensityDpi = (int)Math.ceil(screenPixLen / screenLen);
// 低分手机处理
if(mDensityDpi < 240){
mDensityDpi = outMetrics.densityDpi;
}
} else {
mDensityDpi = 160;
}
if (mDensityDpi == 0) {
mDensityDpi = 160;
}
return mDensityDpi;
}

px=dp *(dpi/160)

image.png

所以,想要在不同的手机即dpi不同的手机上,显示一样大的字体,就要使用dp作为单位

getResources().getDisplayMetrics().density = getResources().getDisplayMetrics().densityDpi / 160

作用主要是用来方便我们px和dp之间的转换使用,因为在代码中指定的控件的尺寸都是默认px为单位的
android开发中,通常使用下面两个方法对px和dp进行转换

public static int px2dip(int px, Context context) {
return (int) (0.5F + px / getDensity(context)); // +0.5防止精度丢失
}

public static int dip2px(Context context, int dip) {
if (context == null) {
return 0;
}
return (int) (0.5F + getDensity(context) * dip);
}

上一篇下一篇

猜你喜欢

热点阅读