转载请注明出处,谢谢!http://www.cnblogs.com/coding-way/p/3457878.html

Android设备种类多样,要想适配好各种屏幕,理解各种屏幕数据是必须的。首先先从DisplayMetircs类聊起,DisplayMetircs类可以很方便的获取屏幕相关的信息,使用方法如下:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

下面解释下DisplayMetircs类里的属性:

widthPixels、heightPixels 这两个属性就是屏幕宽和高的绝对像素,比如:1280,800。
xdpi、ydpi dpi(density independent pixel)这两个属性是对应X轴和Y轴的,每英寸像素数,比如一个像素为240x320,大小为1.5"x2"的屏幕,其xdpi=240/1.5=160,ydpi=320/2=160。注意这个值不一定是整数。
densityDpi  这个值不是精确值,他只代表了屏幕dpi的基准,常用的取值为120、160、240、320等。这个属性对应/layout-ldpi、/layout-mdpi、/layout-hdpi等自动适配的布局文件。
 density  真实dpi(对角线的像素/对角线的英寸)与基准dpi(160)的比值,比如:一个320x480,大小为1.5"x2"的屏幕,其density=240/160=1.5。这个值是给单位dip和单位px换算用的,dip=density*px,后面会详细说明。
 scaledDensity  这个值与density一样, 但在运行中会根据用户设置的系统字体大小来动态调整。

了解了这些基础知识后,各种单位就好理解了:

px (pixels,像素) 顾名思义,实际的像素点数。像素的缺点很明显,Android设备的像素种类很多,如果一个控件的像素为320x320,那么在240x320的屏幕中显示将不完整,所以我们要为每一种屏幕像素配置一种大小,这显然不现实,所以google不推荐使用这个单位。
pt (point,磅) 1pt=1/72英寸,一般用作字体单位,这个同px,都是无法动态调整的单位,不推荐。
dip (Density Independent Pixel,密度无关像素,也可写dp) 为了解决多种像素适配的问题,android引入了dip单位,这个单位的换算公式为:dip/pixels=屏幕dpi/160,而density=屏幕dpi/160,所以dip = density*pixels,也就是说,如果屏幕为240x320,1.5"x2"尺寸,则其dpi为160,density=1,那么一个dip相当与一个px;如果屏幕像素增加到480x800,尺寸不变,那么其dpi为320,density=2,则一个dip相当与两个px,这样就达到了缩放的目的。
 sp (scaled pixels,缩放像素)  类似dip,同样是动态调整的,不过是依据屏幕密度density和用户设置的系统字体大小来调整的,所以sp使用于设置字体的大小。
 mm (millimeters,毫米)  普通长度单位,基于屏幕的实际尺寸。
 in (inches,英寸)  普通长度单位,基于屏幕的实际尺寸。

Android系统dimension单位详解的更多相关文章

  1. [置顶] Android系统五大布局详解Layout

    我们知道Android系统应用程序一般是由多个Activity组成,而这些Activity以视图的形式展现在我们面前,视图都是由一个一个的组件构成的.组件就是我们常见的Button.TextEdit等 ...

  2. Android系统五大布局详解Layout

    我们知道Android系统应用程序一般是由多个Activity组成,而这些Activity以视图的形式展现在我们面前, 视图都是由一个一个的组件构成的.组件就是我们常见的Button.TextEdit ...

  3. Android 系统属性-SystemProperties详解***

    创建与修改android属性用Systemproperties.set(name, value),获取android属性用Systemproperties.get(name),需要注意的是androi ...

  4. Android屏幕适配问题详解

    上篇-Android本地化资源目录详解 :http://www.cnblogs.com/steffen/p/3833048.html 单位: px(像素):屏幕上的点. in(英寸):长度单位. mm ...

  5. 《Android NFC 开发实战详解 》简介+源码+样章+勘误ING

    <Android NFC 开发实战详解>简介+源码+样章+勘误ING SkySeraph Mar. 14th  2014 Email:skyseraph00@163.com 更多精彩请直接 ...

  6. Android开发之InstanceState详解

    Android开发之InstanceState详解   本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...

  7. ANDROID L——Material Design详解(UI控件)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lolli ...

  8. Android中mesure过程详解

    我们在编写layout的xml文件时会碰到layout_width和layout_height两个属性,对于这两个属性我们有三种选择:赋值成具体的数值,match_parent或者wrap_conte ...

  9. Android中Intent组件详解

    Intent是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件.Intent本身是定义为一个类别(Class),一个Intent对象表达一个目的(Goal)或期望(Expectation),叙 ...

随机推荐

  1. Lua之转义字符

    print("\a");    --bell 硬件滴一声 print("a"); print("\b");    --back space  ...

  2. CorelDRAW中关于锁定与解锁对象的操作

    在编辑复制的图形时,有时为了避免对象受到操作的影响,可以使用“锁定与解锁对象”功能键对已经编辑好的对象进行锁定.被锁定的对象将不能进行任何编辑操作,本教程将详解CorelDRAW中关于锁定与解锁对象的 ...

  3. generating-ssh-keys

    https://help.github.com/articles/generating-ssh-keys/ 其中 # start the ssh-agent in the background ssh ...

  4. iOS开发 frame 与 bounds 的区别与关系 转自隔叶黄莺

    frame和bounds是UIView中的两个属性(property). frame指的是:该view在父view坐标系统中的位置和大小.(参照点是父亲的坐标系统) bounds指的是:该view在本 ...

  5. SpringMVC由浅入深day01_9商品修改功能开发

    9 商品修改功能开发 9.1 需求 操作流程: 1.进入商品查询列表页面 2.点击修改,进入商品修改页面,页面中显示了要修改的商品(从数据库查询) 要修改的商品从数据库查询,根据商品id(主键)查询商 ...

  6. backbone学习笔记:模型(Model)(2)属性验证

    Backbone的属性验证有2种方法: 1.Backbone自带简单的验证方法,但是验证规则需要自己实现 通过validate()方法进行验证,验证规则写在此方法里. var RoomModel = ...

  7. RESTFul basic introduction

    http://www.ruanyifeng.com/blog/2011/09/restful.html

  8. Memcached 命令行操作

    telnet 用于连接 Memcached: [root@localhost ~]# telnet Trying 127.0.0.1... Connected to 127.0.0.1. Escape ...

  9. myeclipse环境优化

    在项目右键打开Project > Properties > BUILDERS,打开source的tab,选择你的目录,删之~重启myeclipse 以下转载自百度知道 优化一下,下面内容都 ...

  10. epoll实现机制分析

    本文只介绍epoll的主要流程而不是分析源代码,如果需要了解更多的细节可以自己翻阅相关的内核源代码. 相关内核代码: fs/eventpoll.c 判断一个tcp套接字上是否有激活事件:net/ipv ...