Android中px,dp,sp单位的区别和应用
2016-06-08 15:34
369 查看
下面的解释基本是百度得来的
px:
px就是pixel的缩写啦,pixel即像素,它不是自然界的长度单位。px是就是一张图片中最小的点,一张位图就是由这些点构成的。1024px就是1024像素,最简单的你可以在windows桌面属性里的“设置”看到,如果是1024×768,也就是说水平方向上有1024个点,垂直方向上有768个点。谁能说出一个“点”有多长多大么?可以画的很小,也可以很大。如果点很小,那画面就清晰,我们称它为“分辨率高”,反之,就是“分辨率低”。所以,像素的大小是会“变”的,也称为“相对长度”。
开发中px比较少用,但是一般在画1px的分割线时使用,就是要细线。如果用1dp的,你会看到线略粗
dp:
dp(dip)概念:与密度无关的像素,这是一个基于屏幕物理密度的抽象单位。
这里要解释一下密度的概念,密度(dpi):每英寸包含的像素个数(单位是dpi),1dp实际上相当于密度为160dpi的屏上的一个点(可否理解为物理尺寸?)。也就是说,如果屏幕物理密度是160dpi时,dp和px是等效的。
换算公式1: px
= dp * (dpi / 160)
dpi首先是可以算的:
DPI
= 宽 / ((尺寸2 × 宽2) / (宽2 + 高2))1/2 = 长 / ((尺寸2 × 高2) / (宽2 + 高2))1/2
大概计算方法如下,以宽为例:
1.比如分辨率为320 × 480,则长宽比为1:1.5
2.比如屏幕尺寸为3.6”,则根据勾股定理有:
高2 + 宽2 = 3.62,
又因为,高 = 1.5 × 宽,代入上式,有:
宽2 + 2.25 × 宽2 = 12.96,
得出,宽 = (12.96/3.25)1/2 = 1.9969
3.宽为320px,分布在1.9969”上,因此密度为320 / 1.9969 = 160.2467
4000
诡异事情1:G7的真实dpi是252,根据我以前的理解,310dp换算成px应该是:310 * (252 / 160) = 488像素,而G7水平方向是480px,310dp在这上面绝对满屏都不止了,事实上Android系统并没有拿252作为dpi来计算,而是将G7视
作hdpi设备,然后使用240dpi来计算最终像素,所以在G7上320dp刚好是:320 * (240 / 160) = 480像素,刚好满屏了,310dp确实要差一点点。
原来这里的dpi是归一化后的dpi,可能值120(l)、160(m)、240(h)、 320(x)、480(xxh)
下面来看下dp作用是什么?
dp脱离屏幕像素,显示大小是一样的,至少看起来是差不多的。
在160dpi上,160dp就是1英寸,在240dpi上,160dp还是1英寸,120dpi和 320dpi也还是1英寸,虽然他们占用的像素数不一样,但是最终显示出来的效果都是占用了屏幕上1英寸的范围。这套体系其实是非常合理的,一个宽为 160dp的按钮,它在所有设备上占用的物理尺寸应该是一样大才合理,这样他们对人眼所形成的张角才一样大,观看或者阅读的感觉才一致(姑且不考虑按钮的
背景是否一样细致)。这应该是Android系统引入dp概念的原因,因为手机屏幕的像素密度相差实在太大了,web那套东西已经完全不适用,你想电脑屏 幕的像素密度能相差多大?
有这个表就明白为什么在160dpi上,160dp就是1英寸,在240dpi上,160dp还是1英寸,120dpi和 320dpi也还是1英寸
具体应用差异看别人写的后面的例子:http://zhangkun716717-126-com.iteye.com/blog/1772696
sp:
可伸缩像素的意思,采用和dp同样的设计理念,解决了文字大小设配的问题
px:
px就是pixel的缩写啦,pixel即像素,它不是自然界的长度单位。px是就是一张图片中最小的点,一张位图就是由这些点构成的。1024px就是1024像素,最简单的你可以在windows桌面属性里的“设置”看到,如果是1024×768,也就是说水平方向上有1024个点,垂直方向上有768个点。谁能说出一个“点”有多长多大么?可以画的很小,也可以很大。如果点很小,那画面就清晰,我们称它为“分辨率高”,反之,就是“分辨率低”。所以,像素的大小是会“变”的,也称为“相对长度”。
开发中px比较少用,但是一般在画1px的分割线时使用,就是要细线。如果用1dp的,你会看到线略粗
dp:
dp(dip)概念:与密度无关的像素,这是一个基于屏幕物理密度的抽象单位。
这里要解释一下密度的概念,密度(dpi):每英寸包含的像素个数(单位是dpi),1dp实际上相当于密度为160dpi的屏上的一个点(可否理解为物理尺寸?)。也就是说,如果屏幕物理密度是160dpi时,dp和px是等效的。
换算公式1: px
= dp * (dpi / 160)
dpi首先是可以算的:
DPI
= 宽 / ((尺寸2 × 宽2) / (宽2 + 高2))1/2 = 长 / ((尺寸2 × 高2) / (宽2 + 高2))1/2
大概计算方法如下,以宽为例:
1.比如分辨率为320 × 480,则长宽比为1:1.5
2.比如屏幕尺寸为3.6”,则根据勾股定理有:
高2 + 宽2 = 3.62,
又因为,高 = 1.5 × 宽,代入上式,有:
宽2 + 2.25 × 宽2 = 12.96,
得出,宽 = (12.96/3.25)1/2 = 1.9969
3.宽为320px,分布在1.9969”上,因此密度为320 / 1.9969 = 160.2467
4000
诡异事情1:G7的真实dpi是252,根据我以前的理解,310dp换算成px应该是:310 * (252 / 160) = 488像素,而G7水平方向是480px,310dp在这上面绝对满屏都不止了,事实上Android系统并没有拿252作为dpi来计算,而是将G7视
作hdpi设备,然后使用240dpi来计算最终像素,所以在G7上320dp刚好是:320 * (240 / 160) = 480像素,刚好满屏了,310dp确实要差一点点。
原来这里的dpi是归一化后的dpi,可能值120(l)、160(m)、240(h)、 320(x)、480(xxh)
下面来看下dp作用是什么?
dp脱离屏幕像素,显示大小是一样的,至少看起来是差不多的。
在160dpi上,160dp就是1英寸,在240dpi上,160dp还是1英寸,120dpi和 320dpi也还是1英寸,虽然他们占用的像素数不一样,但是最终显示出来的效果都是占用了屏幕上1英寸的范围。这套体系其实是非常合理的,一个宽为 160dp的按钮,它在所有设备上占用的物理尺寸应该是一样大才合理,这样他们对人眼所形成的张角才一样大,观看或者阅读的感觉才一致(姑且不考虑按钮的
背景是否一样细致)。这应该是Android系统引入dp概念的原因,因为手机屏幕的像素密度相差实在太大了,web那套东西已经完全不适用,你想电脑屏 幕的像素密度能相差多大?
一英寸有多少个点儿? | 我们用来density来分辨 | |
ldpi | 120dpi | 0.75 |
mdpi | 160dpi | 1 |
hdpi | 240dpi | 1.5 |
xhdpi | 320dpi | 2 |
具体应用差异看别人写的后面的例子:http://zhangkun716717-126-com.iteye.com/blog/1772696
sp:
可伸缩像素的意思,采用和dp同样的设计理念,解决了文字大小设配的问题
相关文章推荐
- Android 动态生成复杂的布局(View布局的子控件含自己的点击事件)
- Android——ViewPager+RadioGroup+Fragment
- Android 5.X 新特性详解(一)——主题、Palette、阴影、着色和裁剪
- Android使用线程获取网络图片的方法
- Android图片占据的内存大小分析
- 深入了解Android自动化测试-2.monkey脚本
- android5.1平板或手机应用层一些常用的修改项(eg:MTK8163)
- Android消息循环机制源码分析
- Android开发笔记之四大组件琐碎知识回顾总结
- EventBus 3.0的使用以及要点
- android 中Fragment的简单应用
- Activity跳转最佳实践
- Android实现背景透明度渐变的效果,类似于分享底部的弹出框
- android 实现AIDL之简单计算器
- Android编译可执行程序
- 全局Context
- Android编程之LayoutInflater的inflate方法详解
- Android事件传递
- View 的绘制流程
- Android studio 使用总结(不断更新)