Android开发之单位转换,dp、px、sp
在开放过程中,毕竟UI不是程序员画的,碰到专业技术好点的美工还好,碰到刚开始搞ui的,提供的图片尺寸,字体大小,切图尺寸各种让你无奈。在这里可以解决美工提供的尺寸单位不是自己想要的,可以进行相互转换。
1.现在目前市面的手机屏幕尺寸
480*800 dp表示: hdpi 密实系数:1.5
720*1280 dp表示: xhdpi 密实系数:2
1080*1920 dp表示: xxhdpi 密实系数:3
1440*2560 dp表示: xxxhdpi 密实系数:3.5
但是有的UI真的是懒惰,为适配Android 和 ios 而做一套ios的规格尺寸(1242 x 2208)图片去适配两种系统,这种是最烦人的。怎么办?
可以这样认为:1242 x 2208 密实系数:3.5
2.如果用代码进行转换:获取密实系数,结算转换
/**
* dp转px
* @param dp
* @return
*/
public static int dip2px(int dp)
{
float density = getContext().getResources().getDisplayMetrics().density;
return (int) (dp*density+0.5);
}
/** px转换dip */
public static int px2dip(int px) {
final float scale = getContext().getResources().getDisplayMetrics().density;
return (int) (px / scale + 0.5f);
}
/** px转换sp */
public static int px2sp(int pxValue) {
final float fontScale = getContext().getResources().getDisplayMetrics().scaledDensity;
return (int) (pxValue / fontScale + 0.5f);
}
/** sp转换px */
public static int sp2px(int spValue) {
final float fontScale = getContext().getResources().getDisplayMetrics().scaledDensity;
return (int) (spValue * fontScale + 0.5f);
}
3.如果实在xml中写尺寸:
根据UI提供的图片尺寸选择密度系数,然后要用的尺寸 除以或者乘以 系数+0.5=你要的。
例如:图片一般标注的都是px,但是我们要用dp。可以这样转换 px / 系数+0.5=dp。
例如:图片上标注的字体也是px,但是我们要用sp。还是用上一行的那个公式处理转换。