Android中px、dp、sp以及drawable、mip-map目录
本文目的:使读者深入理解及快速使用(代码复制即可用)
px、dp、sp
【px】:px就是pixel的缩写,pixel即像素,比如我们通常说的手机分辨列表800*400都是px的单位。
【dp】:dip,Density-independent pixel, 是安卓开发用的长度单位,1dp表示在屏幕像素点密度为160ppi时1px长度
【sp】:scale-independent pixel,安卓开发用的字体大小单位。
dp与px(dpi)之间关系
首先需要了解dpi
【dpi】:dot per inch(点每英寸),就是计算机屏幕上每英寸可以显示的像素点的数量。即:像素/英寸
【dp的长度是什么?】:为了便于屏幕适配,安卓的长度单位需与设备的物理长度相关,由此引入了dp。160dp=1inch。即:160dp对应实际设备的物理长度1英寸。使用dp能达到不同dpi设备上长度一致的效果。
【dp与dpi关系】由dp的长度可知,对于160dpi设备,1dp=1px;对于320dpi设备,1dp=2px。
【dp与px换算】 1dp =(屏幕ppi/ 160)px
(注:为了方便计算,不同设备在此基础上会做一定偏移。例330dpi的设备,计算1dp=2.0625px,实际运行时可能为1dp=2px)
相关API:
context.getResources().getDisplayMetrics().density
=(屏幕ppi/ 160)
sp与dp之间关系
dp和sp都是安卓的开发单位,dp是长度单位,sp是字体单位。sp与dp类似,正常情况1sp=1dp,但是可以根据用户的字体大小首选项进行缩放。Android系统允许用户自定义文字尺寸大小(小、正常、大、超大等等),缩放之后sp与px/dp换算会相应变化。
如果app字体需跟随系统字体大小,则字体大小需使用sp。
drawable、mip-map目录
drawable目录对应关系
ldpi --->约120dpi:0.75倍图
mdpi --->约160dpi:1倍图
hdpi --->约240dpi :1.5倍图
xhdpi --->约320dpi:2倍图
xxhdpi --->约480dpi:3倍图
xxxhdpi--->约640dpi:4倍图(add Api18,只用于启动图标)
mip-map目录
参考资料介绍:目前只用于优化启动图标
px、dp、sp转换代码(复制即可用)
public class DisplayUtils {
/**
* convert px to its equivalent dp
*
* 将px转换为与之相等的dp
*/
public static int px2dp(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
/**
* convert dp to its equivalent px
*
* 将dp转换为与之相等的px
*/
public static int dp2px(Context context, float dipValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dipValue * scale + 0.5f);
}
/**
* convert px to its equivalent sp
*
* 将px转换为sp
*/
public static int px2sp(Context context, float pxValue) {
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (pxValue / fontScale + 0.5f);
}
/**
* convert sp to its equivalent px
*
* 将sp转换为px
*/
public static int sp2px(Context context, float spValue) {
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (spValue * fontScale + 0.5f);
}
}
本文参考
本文详细介绍了Android开发中长度单位px、dp、sp的概念及其相互关系,解释了dpi的含义,并提供了dp与px、sp的转换代码。同时,讨论了drawable和mip-map目录在不同dpi设备上的资源适配策略,帮助开发者更好地理解和使用这些概念进行屏幕适配。
3491

被折叠的 条评论
为什么被折叠?



