屏幕的大小:指屏幕对角线的长度,通常用寸来度量。
分辨率:是指手机屏幕的像素点个数,eg:720*1280就是指屏幕的分辨率,指宽有720个像素点,而高有1280个像素点
PPI:每英寸像素,又被称为DPI。它是由对角线的像素点除以屏幕的大小得到的。
系统屏幕密度:
密度 ldpi mdpi hdpi xhdpi xxhdpi
密度值 120 160 240 320 480
分辨率 240*320 320*480 480*800 720*1280 1080*1920
独立像素密度dp:Android系统使用mdpi即密度值160的屏幕作为标准,这个屏幕上1px=1dp。
单位换算工具类:
package com.example.yhl.displaydemo;
import android.content.Context;
import android.util.TypedValue;
/**
* 作者:yhl
* 创建日期:2018/6/20 14:16
* dp,sp 转换为px的工具类
*/
public class DisplayUtil {
/**
* 将px值转换为dip或dp值,保证尺寸大小不变
*
* @param context
* @param pxValue
* @return
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
/**
* 将dip或dp值转换为px值,保证尺寸大小不变
*
* @param context
* @param dipValue
* @return
*/
public static int dip2px(Context context, float dipValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dipValue * scale + 0.5f);
}
/**
* 将px值转换为sp值,保证文字大小不变
*
* @param context
* @param pxValue
* @return
*/
public static int px2sp(Context context, float pxValue) {
final float fontscale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (pxValue / fontscale + 0.5f);
}
/**
* 将sp值转换为px值,保证文字大小不变
*
* @param context
* @param spValue
* @return
*/
public static int sp2px(Context context, float spValue) {
final float fontscale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (spValue * fontscale + 0.5f);
}
/**
* 系统TypedValue
* @param context
* @param dp
* @return
*/
public static int dp2px(Context context, int dp) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());
}
/**
* 系统TypedValue
* @param context
* @param sp
* @return
*/
public static int sp2px(Context context, int sp) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, context.getResources().getDisplayMetrics());
}
}