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 ...
随机推荐
- 在使用jquery时,(e.target).closest("li")是什么意思
今天在群里有童鞋问以下代码中: $(function(){ $(document).bind("click", function (e) { $(e.target).closest ...
- TensorFlow车辆检测
1.先在UIUC Image Database for Car Detection下载训练数据集. 下载地址:http://cogcomp.org/Data/Car/ 下载解压之后文件目录如图所示,这 ...
- mac os x忘记了root密码怎么办,忘记登录密码(普通帐号密码)也是一样的
有时候我们给mac设置了root密码,一段时间不用,却忘记了密码,怎么办?下面的办法帮你解决: 步骤1:先关闭你的mac系统 步骤2:开机,按住Command和s两个按键不松手直到出现下面的界面: 步 ...
- PowerShell命令部署WSP
转载:http://www.cnblogs.com/ChunLiangZhang/archive/2012/07/18/2597335.html(作者:ChunLiang) 现在可以用SharePoi ...
- SharePoint 2013 设置 显示详细错误信息 修改位置总结
以80端口为例—— 1.修改:C:\inetpub\wwwroot\wss\VirtualDirectories\80\web.config文件配置 CallStack="false&quo ...
- LDAP环境搭建 OpenLDAP和phpLDAPadmin -- yum版
前言: 前两天公司要求做一个使用LDAP和Kerberos做一个认证授权系统,然后开始学习LDAP相关知识,期间找了不少博客按照步骤来安装,可是很多博客在配置的时候,都会遇到安装过程中一两个问题卡 ...
- 查询linux服务器有哪些IP在连接
查询linux服务器有哪些IP在连接 netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n 查看linux的 ...
- 基于ksoap2-android的soap的封装
实例基于ksoap2-android-assembly-3.3.0-jar-with-dependencies.jar 1:定义回调接口,通过泛型确定返回值类型 package com.ciii.bd ...
- Linux系统调用接口添加简单示例
1. Linux体系结构 Linux系统的地址空间分为用户空间和内核空间,通过系统调用和硬件中断能够完成从用户空间到内核空间的转移. 2. 系统调用接口 ① 一般情况下,用户进程不能访问内核空间.Li ...
- Problem03 水仙花数
题目:打印出所有的"水仙花数"."水仙花数"是指一个三位数,其各位数字立方和等于该数本身. 例如:153是一个"水仙花数",因为153=1的 ...