一、Android屏幕的计量单位
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;
dp与px转换的方法:
.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屏幕的计量单位的更多相关文章
- 【收藏】Android屏幕适配全攻略(最权威的Google官方适配指导)
		来源:http://blog.csdn.net/zhaokaiqiang1992 更多:Android AutoLayout全新的适配方式, 堪称适配终结者 Android的屏幕适配一直以来都在折磨着 ... 
- Android屏幕适配全攻略(最权威的官方适配指导)(转),共大家分享。
		Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因.重要概念.解决方案及最佳实践,我相信如果你能认真的学习 ... 
- Android屏幕适配全攻略(最权威的官方适配指导)  (转)
		招聘信息: Cocos2d-X 前端主程 [新浪微博]手机客户端iOS研发工程师 20k-40k iOS 开发工程师 iOS高级开发工程师(中国排名第一的企业级移动互联网云计算公司 和创科技 红圈营销 ... 
- 【转】Android屏幕适配全攻略(最权威的官方适配指导)
		原文网址:http://blog.csdn.net/jdsjlzx/article/details/45891551 Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的 ... 
- Android屏幕适配全攻略(最权威的官方适配指导)
		转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入 ... 
- Android屏幕适配全攻略(最权威的官方适配指导)
		摘自:http://www.cocoachina.com/android/20151030/13971.html Android屏幕适配出现的原因 在我们学习如何进行屏幕适配之前,我们需要先了解下为什 ... 
- Android 屏幕适配:最全面的解决方案
		转自:https://www.jianshu.com/p/ec5a1a30694b 前言 Android的屏幕适配一直以来都在折磨着我们Android开发者,本文将结合: Google的官方权威适配文 ... 
- Android屏幕相关概念和适配方法
		参考文档: 1.http://blog.csdn.net/carson_ho/article/details/51234308(略有修改) 2.http://www.cnblogs.com/cheng ... 
- Android屏幕适配全攻略(最权威的官方适配指导)屏幕尺寸 屏幕分辨率 屏幕像素密度 dpdipdpisppx mdpihdpixdpixxdpi
		Android屏幕适配全攻略(最权威的官方适配指导)原创赵凯强 发布于2015-05-19 11:34:17 阅读数 153734 收藏展开 转载请注明出处:http://blog.csdn.net/ ... 
随机推荐
- [sqoop1.99.7] sqoop实例——数据ETL
			一.创建一个mysql的link MySQL链接使用的是JDBC,必须有对应的驱动文件jar,还得有对应的访问权限,请确保能在server端访问MySQL.确保mysql的jar包已经导入到${SQO ... 
- css3实现颜色渐变以及兼容性处理
			有时我们会看到网站上的一些图片是渐变色的,这些图片有的是ui设计出来的,有的则是直接通过css3制作出来的.下面就讲一下css3实现渐变色的方法,以及在各个浏览器上的兼容性. CSS3 Gradien ... 
- C语言实现四则运算
			学生:宋丹丹 张潇裕 #include<iostream>#include<ctime>using namespace std;void main(){ int x1,x2,a ... 
- Oracle 数据库简单操作
			现在大型企业一般都用Oracle数据库,Oracle数据库在一般采用expdp,impdp 导出导入数据,但是在操作中经常会遇到一些问题.下面来浅析这些问题. 1. 导出数据 一般导出数据的时候需要建 ... 
- spark发行版笔记9
			感谢DT大数据梦工厂支持提供技术支持,DT大数据梦工厂专注于Spark发行版定制. 本期概览: 1 Receiver生命全周期 首先,我们找到数据来源的入口,入口如下 Receiver的设计是极其巧妙 ... 
- Understanding the Internal Message Buffers of Storm
			Understanding the Internal Message Buffers of Storm Jun 21st, 2013 Table of Contents Internal messag ... 
- delphi中线程应用之Synchronize
			当一个线程在使用时,如果这个函数使用了Synchronize修钸的话就不允许别一个线程来调用这个函数,它的目的是避免多个子线程同时访问主线程资源.示例:procedure TTaskThread.Sh ... 
- (DFS、全排列)POJ-2718 Smallest Difference
			题目地址 简要题意: 给若干组数字,每组数据是递增的在0--9之间的数,且每组数的个数不确定.对于每组数,输出由这些数组成的两个数的差的绝对值最小是多少(每个数出现且只出现一次). 思路分析: 对于n ... 
- UnityContainer 实现DI
			DI(依赖注入) 的方式有很多种: 接口注入,属性注入,构造注入等.DI主要是为了实现代码的松耦合,方便代码的维护和扩展.(其实都是扯淡). 来说说我为啥要使用DI吧.公司有个项目,需要我一个人完成( ... 
- (转)客户端触发Asp.net中服务端控件事件
			第一章. Asp.net中服务端控件事件是如何触发的 Asp.net 中在客户端触发服务端事件分为两种情况: 一. WebControls中的Button 和HtmlControls中的Type为su ... 
