Android - 开发页面需了解的dip,sp,px知识,以及它们的转换
工作中,时常会有任务要求开发新页面,这时一般的流程是产品经理确定要开发的页面和功能,然后设计师提供设计稿,之后由我们开发人员完成开发工作。
通常,设计师提供的设计稿尺寸标注会很详细,例如涉及到字时,字的大小,位置,颜色,字体等,都会一一标注。这时注意的是,设计师提供的尺寸标注全部是px(像素)为单位。
但我们在开发时不能直接使用px,按照Android规范,间距需使用dip(dp),字体大小需使用sp.
这时就需要我们做出px与dip(dp),sp的转换。
一. 了解dip(dp),sp,px
首先来了解一下。
dip:device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。
dp:通常认为dp = dip,一般我们使用dip。
sp:scaled pixels(放大像素). 主要用于字体显示。问个问题,为什么我们不用dip来控制字体大小?而是使用sp。下面会介绍。
px:像素,是一个绝对值,不同设备显示效果相同,是多少就是多少,不会改变。
所以由此可见,我们为了支持不同分辨率,制作页面时的间距应使用dip,而不是px。但也有特殊的例外情况,例如我们经常会需要在页面中画一条直线,做为分割线,那么线的高度直接用1px即可,这里要用px。
二. dip(dp),sp与px的转换
转换时,涉及到的新概念是分辨率与密度值,如下图
转换公式:dip = px/mdpi基准比例,sp = px/mdpi基准比例,注意不同分辨率的基准比例不同。
例如在1080的分辨率下,比例值是3,设计稿上的间距如果是40px,那么对应的dip就是13.3333dip(尽量使用小数点,更精确)。这样的显示效果会与设计稿一致。
但是,我在上网查阅资料时,发现sp的计算公式略有不同,有一个公式,sp = (int)(px/mdpi + 0.5f),这样最后得到一个整数,难道是字体大小一般要用整数?经过实践发现,还是直接sp=px/mdpi靠谱,例如字体大小是40px,那么13.3333sp才是最准确的答案。
三. 开发时,如果确保计算后的间距于设计稿一致?
这时推荐大家使用的工具是Hierarchyviewer,通过它,可以一目了然的看到真实的px大小,保证开发时的正确。例如下图,
四. 一个小问题,为何字体大小推荐使用sp,而不是dip?
这是因为我们在手机设置里通常有字号大小的调整,当用户调整字号大小时,如从标准调整为超大号,如果你的字体使用sp,就是相应的根据换算调整,如果是dip,则会保持不变,那这样的效果不是我们想要的。
— Kevin Song
2016.5.29
Android - 开发页面需了解的dip,sp,px知识,以及它们的转换的更多相关文章
- 收集整理Android开发所需的Android SDK、开发中用到的工具、Android开发教程、Android设计规范,免费的设计素材等。
AndroidDevTools Android Dev Tools官网地址:www.androiddevtools.cn 收集整理Android开发所需的Android SDK.开发中用到的工具.An ...
- Python 制作Android开发 所需的适配不同分辨率的套图
使用Python做起工具来还真是爽,简单,方便,快捷.今天忙活了一下,制作出一个比较实用的小工具. 自动化套图制作,适配不同屏幕 尤其是对于android开发来说,要适配不同屏幕就需要多套切图,那么. ...
- Android开发--页面切换
1.创建android项目.项目文档如下 2.activity_main布局,Androidv4包里自带的,既然是自带的那么直接拿来用就可以了,当然前提是你得工程里有v4包 <LinearLay ...
- Android开发 所需组件配置
1 Unity中的Android Build Support下载 在Unity中的File>Building Settings>Android>Open Download Page, ...
- Android开发-页面布局
首页布局 首页是ListView的布局 这个还需要制作ListView组件和适配器来显示数据. 关于页面 关于页面显示的是软件的基本信息和软件制作者的信息 这个就是采用基本的页面布局就行.
- Android开发-页面绘制
今天主要绘制了记账页面 记账页面用到的布局是TableLayout加Viewpager联动的方式,通过设置一个标题头可以实现页面的左右滑动,viewpager中添加两个fragment. 需要制作两个 ...
- android开发------编写用户界面之线性布局(补充知识)
在前面的文章中 http://www.cnblogs.com/ai-developers/p/android_linearlayout.html 我们看到了布局中有这样一个属性: layout_wei ...
- Android开发点点滴滴——一些基础的但实用的知识(2)
1.onItemLongClick和onItemClick事件截取 当须要同一时候获得一个listview的条目长按事件(onItemLongClick)和点击事件(onItemClick)时,仅仅须 ...
- 轻松搭建Unity3D 安卓Android开发环境
1,下载安装Java的JDK: http://www.oracle.com/technetwork/java/javase/downloads/index.html (JDK中,包含JRE) 如果是6 ...
随机推荐
- mongoDB3.4安装
添加官方yum源——mongodb3.4vim /etc/yum.repos.d/mongodb-org-3.4.repo [mongodb-org-3.4] name=MongoDB Reposit ...
- 关于c++中const的基本用法
c++中的const 有点类似于c里的宏定义#define,但是似乎是在宏定义基础上的代码优化,具体我解释不清,下面主要提到的是 const 在c++中的3中基本用法: 1.指向常量的指针 例如:co ...
- Android + Appium 自动化测试完整的环境配置及代码详解
环境的的搭建 参考大神博客:https://www.cnblogs.com/fnng/p/4540731.html 该博客有一套详细的入门教程,奈何时间有点久远有些东西不能用了,但是参考价值还是有滴. ...
- sqlserver 索引进阶(上)
参考原文:http://www.cnblogs.com/tjy9999/p/4494662.html 2. 非聚集索引 SET STATISTICS io ON SET STATISTICS time ...
- esper(4-2)-Category Context
语法: create context context_name group [by] group_expression as category_label [, group [by] group_ex ...
- thinkphp的初步认识
框架的意义减少重复劳动便于团队配合增强安全性工作/面试都需要 为什么学习ThinkPHP国内公司用的多框架基本都是MVC架构,学一则通 一.框架的部署 1.1下载tp官网 http://www.thi ...
- 下载,安装oracle数据库以及navicat连接数据库
一.学习时所遇问题: 1.在下载之前以为oracle不是免费的,但是后来才知道oracle对于个人学习时是免费的,可以到官网下载安装.在下载时由于要注册oracle官网,所以尝试了好几遍,才成功下载o ...
- Android NDK开发 字符串(四)
几个概念首先要明确: java内部是使用16bit的unicode编码(UTF-16)来表示字符串的,无论中文英文都是2字节: jni内部是使用UTF-8编码来表示字符串的,UTF-8是变长编码的un ...
- 3d Max 2013安装失败怎样卸载3dsmax?错误提示某些产品无法安装
AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...
- 牛客网Java刷题知识点之匿名对象、匿名对象的内存结构图、匿名对象的应用场景、匿名对象的使用、匿名对象的简单例子、匿名对象要注意的事项
不多说,直接上干货! 什么是匿名对象? 答: 没有名字的实体,也就是该实体没有对应的变量名引用. 没有名字的实体,没有引用类型变量指向的对象称作为匿名对象. 正常的,是 Car car = new ...