px  :是屏幕的像素点
in   :英寸
mm:毫米
pt   :磅,1/72英寸
dp  :一个基于density的抽象单位,如果一个160dpi的屏幕,1dp=1px
dip :等同于dp
sp  :同dp相似,但还会根据用户的字体大小偏好来缩放。
建议使用sp作为文本的单位,其它用dip

dip和px的关系:
QVGA:   density=0.75;     densityDpi=120;     QVGA(240*320)

HVGA:   density=1.0;       densityDpi=160;     HVGA(320*480)

VGA:      density=1.0;       densityDpi=160;     VGA(480*640)

WVGA:  density=1.5;       densityDpi=240;     WVGA(480*800)

WQVGA:density=2.0;       densityDpi=120;     WQVGA(240*400)

densityDip值表示每英寸有多少个显示点DIP,不同于像素,但和像素有个比率,就是density,每英寸屏幕里包含的像素数和DIP的比值就是density,当density等于1.0时,每英寸里包含的DPI点数和像素数是相等的。他们之间有如下的换算关系:

ensity = densityDpi/160;

pixs=dips * (densityDpi/160)=dips/density;

dips=(pixs*160)/densityDpi=pixs*density;

dppx转换的方法:

.5f);
}

android默认是使用density来匹配图像资源,

当屏幕density=2时,使用xhdpi标签的资源

当屏幕density=1.5时,使用hdpi标签的资源

当屏幕density=1时,使用mdpi标签的资源

当屏幕density=0.75时,使用ldpi标签的资源

需要注意的是,资源是使用density来区分的,而不是屏幕大小,大的屏,也可能使用mdpi的资源,小的高密屏,也可能使用xhdpi资
源,这样是为了解决图像被拉伸和缩放后变形或者模糊的问题,小分辨率图片放在高密的屏幕中为显得很小,大分辨率的图片放在低密度的屏幕中,可能会有显示不
全的问题。同时图片分辨率和屏幕不匹配时,系统为需要大量的额外内存来对图像进行拉伸和缩放,这些额外的开销,会降低程序运行的效率。给用户不好的使用体
验。最关健是可能会引起内存溢出的异常,这是由android内存回收机制引起,对于大量图片使用的情况,发生的概率相当的高,目前没有有效办法解决。

手机density和DIP可以使用以下方法获取,两种方法,一种是getWindowManager获取,一种是通过getResources的获取,两种结果是一样的,但因为某些原因,可能会有差异,有些手机厂商会修改API,有些厂商无良厂商会让低端屏故意显示高端的数据,如果你获取的屏幕数据不太准确,也不必太过在意:

voidgetDefaultDisplayScreenSize()

{

DisplayMetricsdm = newDisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(dm);

intscreenWidthDip = dm.widthPixels;// 屏幕宽(dip,如:320dip)

intscreenHeightDip = dm.heightPixels;// 屏幕宽(dip,如:533dip)

density= dm.density;// 屏幕密度(像素比例:0.75/1.0/1.5/2.0)

intdensityDPI= dm.densityDpi;// 屏幕密度(每寸像素:120/160/240/320)

floatxdpi= dm.xdpi;

floatydpi= dm.ydpi;

w= dm.widthPixels;// 屏幕宽(px,如:480px)

h= dm.heightPixels;// 屏幕高(px,如:800px)

Log.e(TAG+ " DisplayMetrics(222)","screenWidthDip="+ screenWidthDip

+"; screenHeightDip="+ screenHeightDip);

Log.e(TAG+ " DisplayMetrics(222)","w="+ w

+"; h="+ h);

}

voidgetDefaultDisplayScreenDensityDPI()

{

DisplayMetricsdm = newDisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(dm);

density= dm.density;// 屏幕密度(像素比例:0.75/1.0/1.5/2.0)

densityDPI= dm.densityDpi;// 屏幕密度(每寸像素:120/160/240/320)

floatxdpi = dm.xdpi;

floatydpi = dm.ydpi;

Log.e(TAG+ " DefaultDisplay","xdpi="+ xdpi + "; ydpi="+ ydpi);

Log.e(TAG+ " DefaultDisplay","density="+ density +"; densityDPI="

+densityDPI);

}

voidgetDisplayMetricsScreenSize()

{

DisplayMetricsdm = newDisplayMetrics();

dm= getResources().getDisplayMetrics();

floatdensity = dm.density;// 屏幕密度(像素比例:0.75/1.0/1.5/2.0)

intdensityDPI = dm.densityDpi;// 屏幕密度(每寸像素:120/160/240/320)

floatxdpi = dm.xdpi;

floatydpi = dm.ydpi;

Log.e(TAG+ " DisplayMetrics","xdpi="+ xdpi + "; ydpi="+ ydpi);

Log.e(TAG+ " DisplayMetrics","density="+ density + "; densityDPI="

+densityDPI);

w= dm.widthPixels;// 屏幕宽(像素,如:480px)

h= dm.heightPixels;// 屏幕高(像素,如:800px)

Log.e(TAG+ " getDisplayMetricsScreenSize","w="+ w

+"; h="+ h);

}

voidgetDisplayMetricsScreenDensityDPI()

{

DisplayMetricsdm = newDisplayMetrics();

dm= getResources().getDisplayMetrics();

density= dm.density;// 屏幕密度(像素比例:0.75/1.0/1.5/2.0)

densityDPI= dm.densityDpi;// 屏幕密度(每寸像素:120/160/240/320)

floatxdpi = dm.xdpi;

floatydpi = dm.ydpi;

Log.e(TAG+ " DisplayMetrics","xdpi="+ xdpi + "; ydpi="+ ydpi);

Log.e(TAG+ " DisplayMetrics","density="+ density +"; densityDPI="

+densityDPI);

}

一、Android屏幕的计量单位的更多相关文章

  1. 【收藏】Android屏幕适配全攻略(最权威的Google官方适配指导)

    来源:http://blog.csdn.net/zhaokaiqiang1992 更多:Android AutoLayout全新的适配方式, 堪称适配终结者 Android的屏幕适配一直以来都在折磨着 ...

  2. Android屏幕适配全攻略(最权威的官方适配指导)(转),共大家分享。

    Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因.重要概念.解决方案及最佳实践,我相信如果你能认真的学习 ...

  3. Android屏幕适配全攻略(最权威的官方适配指导) (转)

    招聘信息: Cocos2d-X 前端主程 [新浪微博]手机客户端iOS研发工程师 20k-40k iOS 开发工程师 iOS高级开发工程师(中国排名第一的企业级移动互联网云计算公司 和创科技 红圈营销 ...

  4. 【转】Android屏幕适配全攻略(最权威的官方适配指导)

    原文网址:http://blog.csdn.net/jdsjlzx/article/details/45891551 Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的 ...

  5. Android屏幕适配全攻略(最权威的官方适配指导)

    转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入 ...

  6. Android屏幕适配全攻略(最权威的官方适配指导)

    摘自:http://www.cocoachina.com/android/20151030/13971.html Android屏幕适配出现的原因 在我们学习如何进行屏幕适配之前,我们需要先了解下为什 ...

  7. Android 屏幕适配:最全面的解决方案

    转自:https://www.jianshu.com/p/ec5a1a30694b 前言 Android的屏幕适配一直以来都在折磨着我们Android开发者,本文将结合: Google的官方权威适配文 ...

  8. Android屏幕相关概念和适配方法

    参考文档: 1.http://blog.csdn.net/carson_ho/article/details/51234308(略有修改) 2.http://www.cnblogs.com/cheng ...

  9. Android屏幕适配全攻略(最权威的官方适配指导)屏幕尺寸 屏幕分辨率 屏幕像素密度 dpdipdpisppx mdpihdpixdpixxdpi

    Android屏幕适配全攻略(最权威的官方适配指导)原创赵凯强 发布于2015-05-19 11:34:17 阅读数 153734 收藏展开 转载请注明出处:http://blog.csdn.net/ ...

随机推荐

  1. [sqoop1.99.7] sqoop实例——数据ETL

    一.创建一个mysql的link MySQL链接使用的是JDBC,必须有对应的驱动文件jar,还得有对应的访问权限,请确保能在server端访问MySQL.确保mysql的jar包已经导入到${SQO ...

  2. css3实现颜色渐变以及兼容性处理

    有时我们会看到网站上的一些图片是渐变色的,这些图片有的是ui设计出来的,有的则是直接通过css3制作出来的.下面就讲一下css3实现渐变色的方法,以及在各个浏览器上的兼容性. CSS3 Gradien ...

  3. C语言实现四则运算

    学生:宋丹丹 张潇裕 #include<iostream>#include<ctime>using namespace std;void main(){ int x1,x2,a ...

  4. Oracle 数据库简单操作

    现在大型企业一般都用Oracle数据库,Oracle数据库在一般采用expdp,impdp 导出导入数据,但是在操作中经常会遇到一些问题.下面来浅析这些问题. 1. 导出数据 一般导出数据的时候需要建 ...

  5. spark发行版笔记9

    感谢DT大数据梦工厂支持提供技术支持,DT大数据梦工厂专注于Spark发行版定制. 本期概览: 1 Receiver生命全周期 首先,我们找到数据来源的入口,入口如下 Receiver的设计是极其巧妙 ...

  6. Understanding the Internal Message Buffers of Storm

    Understanding the Internal Message Buffers of Storm Jun 21st, 2013 Table of Contents Internal messag ...

  7. delphi中线程应用之Synchronize

    当一个线程在使用时,如果这个函数使用了Synchronize修钸的话就不允许别一个线程来调用这个函数,它的目的是避免多个子线程同时访问主线程资源.示例:procedure TTaskThread.Sh ...

  8. (DFS、全排列)POJ-2718 Smallest Difference

    题目地址 简要题意: 给若干组数字,每组数据是递增的在0--9之间的数,且每组数的个数不确定.对于每组数,输出由这些数组成的两个数的差的绝对值最小是多少(每个数出现且只出现一次). 思路分析: 对于n ...

  9. UnityContainer 实现DI

    DI(依赖注入) 的方式有很多种: 接口注入,属性注入,构造注入等.DI主要是为了实现代码的松耦合,方便代码的维护和扩展.(其实都是扯淡). 来说说我为啥要使用DI吧.公司有个项目,需要我一个人完成( ...

  10. (转)客户端触发Asp.net中服务端控件事件

    第一章. Asp.net中服务端控件事件是如何触发的 Asp.net 中在客户端触发服务端事件分为两种情况: 一. WebControls中的Button 和HtmlControls中的Type为su ...