博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android中px、dp、sp以及drawable、mip-map目录
阅读量:6373 次
发布时间:2019-06-23

本文共 2257 字,大约阅读时间需要 7 分钟。

hot3.png

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目录对应关系

  1. ldpi --->约120dpi:0.75倍图
  2. mdpi --->约160dpi:1倍图
  3. hdpi --->约240dpi :1.5倍图
  4. xhdpi --->约320dpi:2倍图
  5. xxhdpi --->约480dpi:3倍图
  6. 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);    }}

本文参考

转载于:https://my.oschina.net/lichuangnk/blog/1824546

你可能感兴趣的文章
《Exchange Server 2013 SP1管理实践》——导读
查看>>
syslog:类Unix系统常用的log服务
查看>>
使用Annotation设计持久层
查看>>
深入实践Spring Boot2.4.1 Neo4j依赖配置
查看>>
Zen Cart 如何添加地址栏上的小图标
查看>>
SecureCrt 连接Redhat linux
查看>>
[NHibernate]持久化类(Persistent Classes)
查看>>
如何在Hive中使用Json格式数据
查看>>
linux如何恢复被删除的热文件
查看>>
Eclipse(MyEclipse) 自动补全
查看>>
Struts2中dispatcher与redirect的区别
查看>>
zabbix agentd configure
查看>>
地图点聚合优化方案
查看>>
Google Chrome 快捷方式
查看>>
备考PMP心得体会
查看>>
vue proxy匹配规则
查看>>
线上应用故障排查之一:高CPU占用
查看>>
Extend Volume 操作 - 每天5分钟玩转 OpenStack(56)
查看>>
IronPython教程
查看>>
squid via检测转发循环
查看>>