一、我们先看看安卓里面有几种单位
1.dp(dip):density-independent pixels,这并不是一个绝对的单位,而只是一个相对的概念,代表的是屏幕写对角线上每inch上像素点的个数。
2.px:就是一个像素
3.sp:scaled pixels,主要用于显示文字的大小,google官方推荐使用这一单位,因为察看TextView的源码可知Android默认使用sp作为字号单位。
4.pt:point,一个pt=1/72(inch);
5.in:inch(英寸)
6.mm:毫米
二、明确几个概念
1.屏幕尺寸:手机屏幕斜对角线的长度,单位inch
2.屏幕密度(dpi):dot per inch,计算方式:(h^2+w^2)开方/屏幕尺寸
3.分辨率:一个物理屏幕上总的像素点数,如1280x720。
三、接下来看段源码,在android源码包TypedValue.java中,我们看如下函数:
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;
}
metrics.density:默认值为DENSITY_DEVICE / (float) DENSITY_DEFAULT;
metrics.scaledDensity:默认值为DENSITY_DEVICE / (float) DENSITY_DEFAULT;
metrics.xdpi:默认值为DENSITY_DEVICE;
DENSITY_DEVICE:屏幕密度
DENSITY_DEFAULT:默认值为160
四、因此我们可以通过计算得到大致数据如下
*注意:xxhdpi原本是google官方留给平板的,所以其实这里把1080X1920屏幕的手机放在xxhdpi下是不合适的。目前市场上的1080X1920的手机屏幕尺寸基本都在5以上,所以实际上这些手机的屏幕密度是达不到480dpi的,因此在这里我们建议同志们在做1080X1920手机屏幕适配时按照xhdpi即可。
总结:1.切图应该出两套,即480*800下一套,720*1280下一套。
2.dimens适配如果用dp来写,320X480还有480X800可以用一套dp,而720X1280及1080X1920的用一套