android 序列化drawable,Android中px、dp、sp以及drawable、mip-map目录

本文详细介绍了Android开发中长度单位px、dp、sp的概念及其相互关系,解释了dpi的含义,并提供了dp与px、sp的转换代码。同时,讨论了drawable和mip-map目录在不同dpi设备上的资源适配策略,帮助开发者更好地理解和使用这些概念进行屏幕适配。

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);

}

}

本文参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值