1.屏幕参数
屏幕大小:指屏幕对角线的长度,通常用“寸”来度量。例如 5.5寸手机。(1英寸=2.54厘米)
分辨率:指手机屏幕的像素点个数,例如720x1280,指宽有720个像素点,高有1280个像素点。
PPI:每英寸像素(Pixels Per Inch)又被称为DPI(Dots Per Inch)。它是有对角线的像素点除以屏幕的大小得到的,通常达到400PPI就算是比较高的屏幕密度了。
2.独立像素密度dp
Android系统使用mdpi即密度值为160的屏幕作为标准,在这个屏幕上1dp=1px,其他屏幕通过比例换算如下表。
宽×高(标准值) | 240×320 | 320×480 | 480×800 | 720×1280 | 1080×1920 | 1440×2560 |
---|---|---|---|---|---|---|
DPI等级 | LDPI | MDPI | HDPI | XHDPI | XXHDPI | XXXHDPI |
DPI数值( | 120 | 160 | 240 | 320 | 480 | 640 |
对应比例 | 3 | 4 | 6 | 8 | 12 | 16 |
1DP=?PX (density) | 0.75 | 1 | 1.5 | 2 | 3 | 4 |
另:density和PPI的关系:density = ppi/160 = dpi/160
px = dp x density = dp x (dpi/160)
以上均为16:9的手机屏幕,18:9的手机主流分辨率为1080*2160
当控件在对应的文件夹中没有找到,就从高分辨率的文件夹依次向低分辨率的文件夹中寻找
3.单位转换工具类
public class DisplayUtil {
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
* <p>
* fontScale DisplayMetrics类中属性 density
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
* <p>
* fontScale DisplayMetrics类中属性 density
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
/**
* 根据手机的分辨率从 sp 的单位 转成为 px(像素)
* <p>
* fontScale DisplayMetrics类中属性 scaledDensity
*/
public static int sp2px(Context context, float spValue) {
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (spValue * fontScale + 0.5f);
}
/**
* 根据手机的分辨率从 px(像素) 的单位 转成为 sp
* <p>
* fontScale DisplayMetrics类中属性 scaledDensity
*/
public static int px2sp(Context context, float pxValue) {
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (pxValue / fontScale + 0.5f);
}
/**
* dp2px
*/
public static int dpTopx(Context context, float dpValue) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
dpValue,
context.getResources().getDisplayMetrics());
}
/**
* sp2px
*/
public static int spTopx(Context context, float spValue) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,
spValue,
context.getResources().getDisplayMetrics());
}
}
网友评论