转载请注明出处,谢谢!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. 18 如何使用go来采集windows的基本硬件信息后发送到CMDB的服务器上

    preface 之前我使用python写了cmdb采集的脚本,打包成exe的二进制文件后放在windows上执行,也达到了预期的效果. 但是最近部门要上open-falcon监控体系,每个服务器都要安 ...

  2. c语言中左移、右移中的高位需要注意

    有符号数,左移可能会破坏符号位. 右移时,要注意高位符号. 0X表示十六进制.十六进制每位数值由 0-f表示.所以0XC0 对应 二进制为 11000000B10进制与16进制间关系:1 -- 0X1 ...

  3. [scala] scala 集合(⑧)

    1.List 基础操作 2.Set 基础操作 3. TreeSet 排序Set 4. 拉链操作 5. 流 import scala.collection.immutable.TreeSet impor ...

  4. php 内存分配

    php内核中的内存分配 使用的函数有 emalloc(), erealloc() ,这两个函数分别是malloc(),realloc()函数的封装 关于内存分配有四个容器:cache,小块内存链表,大 ...

  5. highcharts图表中级入门:非histock图表的highcharts图表如何让图表产生滚动条

    最近highcharts图表讨论群里面很多朋友都在问如何让highcharts图表在X轴数据多的情况下产生滚动条的问题,其实之前有一个解决办法是将装载图表的div容器用css样式表弄一个滚动条出来.这 ...

  6. Oracle的动态SQL

    例1:传递表名,和Where条件删除数据 CREATE OR REPLACE PROCEDURE raise_emp_salary (column_value NUMBER, emp_column V ...

  7. Log4net用法(.config文件)

    1.引用log4net.dll 2.在AssemblyInfo.cs中添加初始化: [assembly: log4net.Config.XmlConfigurator(ConfigFile = &qu ...

  8. 【Cesium】天空盒子

    skyBox: new Cesium.SkyBox({ sources: { positiveX: 'static/image/skyBox/posx.jpg', negativeX: 'static ...

  9. Mac 使用 launchctl 定时运行程序(转载)

    摘要: 在linux下可以用crontab来定时执行任务,在mac下可以用launchctl来定时执行任务. 在linux下可以用crontab来定时执行任务,在MAC下可以用launchctl来定时 ...

  10. 使用 requests 发送 GET 请求

    基本用法: import requests req = requests.get("http://www.baidu.com/") //发起GET请求 print(req.text ...