文档章节

Android : dip/dp与px(pixel)之间的相互转换

蜀山下的鱼
 蜀山下的鱼
发布于 2015/04/29 00:43
字数 856
阅读 10
收藏 0

原文:http://blog.sina.com.cn/aoyousatuo


在Android应用的开发过程中,我们常常需要给组件布局定位。这就涉及到Android常用的两个计量单位dip/dp, px.下面笔者就这两个单位做一个简要的介绍。

dip或者dp是device independent pixels(设备独立像素)的缩写。这个单位提出的目的主要是为了让应用的UI布局适应各种分辨率的显示设备。Android会将dp最终转换成具体显示设备的像素数,这样就提高了程序的可移植性。

px是pixel的缩写,它表示一个实实在在的物理像素。这个单位使用起来比较方便,但是组件一旦定位就固定了,它不会随着设备的分辨率不同而改变,使用该单位的程序可移植性较差。

举个例子,在400像素宽的屏幕上从第0个像素到第399个像素画一条横线,我们可以看到这条线横向贯穿了整个屏幕,然后我们将相同的画线程序运行在800像素宽的屏幕上,则我们只能看到这条线只有屏幕的一半。如果换作dp为单位,则在这两种分辨率的屏幕上的线基本都横向贯通。

所以在开发中,为了提高程序对各种设备的适应性,我们最好使用dp或者dip为单位。知道了这两个单位的特点,问题就来了。我们发现虽然一些组件可以在布局文件中通过dip或者dp单位来定构。但是,组件类的相关方法却只能以像素为单位。例如,设置GridView组件类的列间距。这种情况下就涉及到了dip/dp与px之间的相互转换。笔者直接给出两个方法大家就清楚了,请看:

 

public int dip2px(Context context, floatdipValue)

{

floatm=context.getResources().getDisplayMetrics().density ;

return (int)(dipValue * m + 0.5f) ;

}

 

public int px2dip(Context context, floatpxValue)

{

  float m=context.getResources().getDisplayMetrics().density;

  return (int)(pxValue / m + 0.5f) ;

}


面对Android设备那混乱的硬件体系,最淡定的开发者也会不免蛋疼起来。在做Android UI的时候,考虑最多的就是这些不同设备的适配问题。在为不同分辨率设计不同UI的时候,我们首先要知道目标设备的分辨率到底是多少。如何计算出来?

水果手机经常喜欢用分辨率超过人眼极限来标榜自己的设备有多么牛B,据说iPhone 4S的分辨率达到了326 PPI(pixel per inch),这个数值的计算公式为:

开方(屏幕宽度平方+屏幕高度平方)÷对角线尺寸

iPhone 4S,960×640像素,对角线尺寸3.5英寸,用上面的公式计算结果如下:

sqrt(sqr(960) + sqr(640)) / 3.5 ≈ 329.65

看来水果公司并未说谎。只是3.5寸的屏搞这么高的分辨率,考视力么?

和水果比起来,Android就更加复杂了,它把屏幕分成small,normal,large,xlarge四种,其对应的屏幕尺寸如下:

  • xlarge 至少960dp x 720dp
  • large 至少640dp x 480dp
  • normal 至少470dp x 320dp
  • small 至少426dp x 320dp

dp(Density-independent pixel)是一个密度无关的像素单位,是用来表示基于160 dpi的设备计算出来的虚拟像素。


本文转载自:http://blog.csdn.net/caiwenfeng_for_23/article/details/37584109

蜀山下的鱼
粉丝 9
博文 405
码字总数 0
作品 0
广州
高级程序员
私信 提问
dpi 、 dip 、分辨率、屏幕尺寸、px、density 关系以及换算

一、基本概念 dip : Density independent pixels ,设备无关像素。 dp :就是dip px : 像素 dpi :dots per inch , 直接来说就是一英寸多少个像素点。常见取值 120,160,240。我一般称作...

小湘西
2015/11/06
0
0
dpi 、 dip 、分辨率、屏幕尺寸、px、density 关系以及换算

一、基本概念 dip : Density independent pixels ,设备无关像素。 dp :就是dip px : 像素 dpi :dots per inch , 直接来说就是一英寸多少个像素点。常见取值 120,160,240。我一般称作...

geek_loser
2015/11/06
0
0
dp,px,pt,sp 的区别 以及dp 和 px 互转

dp = dip : device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。 px: pixels(像素). 不...

Rella蕾拉
2015/04/17
0
0
Android 自适应不同分辨率屏幕

前几天,面试的时候,有问道关于如何自适应不同分辨率屏幕的问题。当时也是一知半解,今天索性看了很多资料,好好的总结了下。 首先解释几个基本的概念: in:表示英寸,是屏幕的物理尺寸。每...

的书法上的
2014/07/15
0
0
Android度量单位说明(DIP,DP,PX,SP)

(一)概念 dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。 px: pixels(像素...

sflfqx
2014/12/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

springboot 整合redis

springboot整合redis官方是有文档的: 英文看不懂可以翻译,代码应该看得懂, 这个是自动注入的。当然也可以xml注入,手动配置。 整合步骤: pom文件: <!-- spring boot web --> ...

jason_kiss
26分钟前
2
0
手机耗电问题,大部分是没有正确使用这个“锁”

当安卓设备闲置时,设备很快会进入休眠状态,以达到省电和减少CPU占用的目的。但有些应用在手机灭屏甚至系统休眠时,依然频繁占用CPU处理事件或唤醒屏幕提示用户消息,这类行为会导致手机耗电...

安卓绿色联盟
28分钟前
1
0
UI 设计中的渐变

>**简评:**渐变是通过两种或多种不同的色彩来绘制一个元素,同时在颜色的交界处进行衰减变化的一种设计。从拟物到扁平再到渐变,人们慢慢发现它能创造出从未有过的一种色彩感觉 —— 独特、...

极光推送
33分钟前
3
0
powerdesigner name 转注释vb脚本

Option Explicit ValidationMode = True InteractiveMode = im_BatchDim mdl ' the current model' get the current active model Set mdl = ......

zhu97
38分钟前
2
0
V2Ray的安装与使用

1 1. bash <(curl -s -L https://git.io/v2ray.sh)yum update -y && yum install curl -y安装好 curl 之后就能安装脚本了输入快捷管理命令v2ray后,开始进行v2ray服务端配置...

吕湘颖
40分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部