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. 关于favicon.ico,shortcut icon,icon

    引入一篇文章.关于favicon.ico二三事. http://www.cnblogs.com/LoveJenny/archive/2012/05/22/2512683.html 一直对favicon ...

  2. WAP站点(IIS/Apache)的服务器设置

    Server 端的设置IIS服务器:为了使IIS支持WAP(WML)页面的发布,在IIS的Web站点的属性 / HTTP信息中设置WAP的MIME属性,添加如下的MIME类型:扩展名 内容类型(MIM ...

  3. kaggle数据挖掘竞赛初步--Titanic<派生属性&维归约>

    完整代码: https://github.com/cindycindyhi/kaggle-Titanic 特征工程系列: Titanic系列之原始数据分析和数据处理 Titanic系列之数据变换 Ti ...

  4. spring加载hibernate映射文件的几种方式。转自:http://blog.csdn.net/huiwenjie168/article/details/7013618

    在Spring的applicationContext.xml中配置映射文件,通常是在<sessionFactory>这个Bean实例中进行的,若配置的映射文件较少时,可以用sessionF ...

  5. CentOS5.4 搭建Hadoop2.5.2伪分布式环境

    简介: Hadoop是处理大数据的主要工具,其核心部分是HDFS.MapReduce.为了学习的方便,我在虚拟机上搭建了一个伪分布式环境,来进行开发学习. 一.安装前准备: 1)linux服务器:Vm ...

  6. 移动端WEB开发备忘录

    META相关 1. 添加到主屏后的标题(IOS)  <meta name="apple-mobile-web-app-title" content="标题" ...

  7. 【软件】【diamond】-管脚分配

    未用到的引脚设置,浮空引脚设置.可以设置浮空电压

  8. 第十讲(LINQ)

    一..LINQ查询 例如: static void LINQQuery() { var query = from r in Formula1.GetChampions() where r.Countr ...

  9. session的工作原理

    asp中Session的工作原理:asp的Session是具有进程依赖性的.ASP Session状态存于IIS的进程中,也就是inetinfo.exe这个程序.所以当inetinfo.exe进程崩溃 ...

  10. OC中用NSSortDescriptor对象进行数组排序

    //创建一个数组 NSArray *array = @[@"one", @"two", @"three", @"four" ...