android计算屏幕dp
首先我们来了解一些基本元素:
px:像素,屏幕上的点。
dpi:一英寸长的直线上的像素点的数量,即像素密度。标准值是160dp。
/**
* 正是因为dpi值其代表的特性,所以android项目的资源文件下存在以下目录:
drawable-ldpi ( 当dpi为120时,使用此目录下的资源)
drawable-mdpi ( 当dpi为160时,使用此目录下的资源)
drawable-hdpi ( 当dpi为240时,使用此目录下的资源)
drawable-xhdpi ( 当dpi为320时,使用此目录下的资源)
drawable-xxhdpi ( 当dpi为480时,使用此目录下的资源)
Android正是根据设备DPI值得不同,选择清晰度不同的资源使用,完成屏幕的适配。
*/
dp(dip):独立像素密度。即在标准屏幕下,1个像素点的长度,标准屏幕是160dpi,可以理解为1英寸长度上有160个像素。标准屏幕中1dp=1px。
px(像素) = dp(独立像素密度) * (dpi(像素密度) / 160)
分辨率:屏幕上长宽方向上像素点的数量,即一个屏幕上像素的数量。
例如:720*1280 = 屏幕x轴上有720个像素,屏幕y轴上有1280个像素
分辨率单位:dpi(点每英寸)、lpi(线每英寸)、ppi(像素每英寸)
屏幕的物理尺寸:屏幕对角线的长度,单位是inch
sp:专用于设定文字大小,受dpi影响和用户的字体偏好设定影响。
下面我们来计算屏幕dp:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int screenHeight = metrics.heightPixels;//屏幕高度像素
int screenWidth = metrics.widthPixels;//屏幕宽度像素
//density = densityDpi / 160
float density = metrics.density;// "屏幕密度"(0.75 / 1.0 / 1.5)
int densityDpi = metrics.densityDpi;// 屏幕密度dpi(120 / 160 / 240)每一英寸的屏幕所包含的像素数.值越高的设备,其屏幕显示画面的效果也就越精细
// 屏幕宽度算法:屏幕宽度(像素)/"屏幕密度" px = dp * (dpi / 160)
int height = (int) (screenHeight / density);//屏幕高度dp
但是,需要注意的是,在一个低密度的小屏手机上,仅靠上面的代码是不能获取正确的尺寸的。比如说,一部240x320像素的低密度手机,如果运行上述代码,获取到的屏幕尺寸是320x427。因此,研究之后发现,若没有设定多分辨率支持的话,Android系统会将240x320的低密度(120)尺寸转换为中等密度(160)对应的尺寸,这样的话就大大影响了程序的编码。所以,需要在工程的AndroidManifest.xml文件中,加入supports-screens节点,具体的内容如下:
<!-- 得到屏幕正常的物理尺寸 -->
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:resizeable="true"
android:smallScreens="true" />
这样的话,当前的Android程序就支持了多种分辨率,那么就可以得到正确的物理尺寸了。
android计算屏幕dp的更多相关文章
- Android 多屏幕适配 dp和px的关系 最好用dp
Android 多屏幕适配 dp和px的关系 一直以来别人经常问我,android的多屏幕适配到底是怎么弄,我也不知道如何讲解清楚,或许自己也是挺迷糊. 以下得出的结论主要是结合官方文档进行分析的ht ...
- Android各种屏幕适配原理
dip(dp): device independent pixels(设备独立像素) dip,就是把屏幕的高分成480分,宽分成320分.比如你做一条160dip的横线,无论你在320还480的模拟器 ...
- 【Android 应用开发】分析各种Android设备屏幕分辨率与适配 - 使用大量真实安卓设备采集真实数据统计
.主要是为了总结一下 对这些概念有个直观的认识; . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/198 ...
- [转]android – 多屏幕适配相关
1.基本概念 屏幕大小(screen size) – 屏幕的实际大小,用屏幕对角线长度来衡量(比如3.4寸,3.8寸).android把屏幕分为以下4种:small,normal,large,extr ...
- Android中dip, dp, px,pt, sp之间的区别:
Android中dip.dp.sp.pt和px的区别 1.概述 过去,程序员通常以像素为单位设计计算机用户界面.例如:图片大小为80×32像素.这样处理的问题在于,如果在一个每英寸点数(dpi)更 ...
- Android开发中dp、dpi、px的区别(转)
一.基本概念 - dp:安卓中的相对大小 - dpi:(dot per inch)每英寸像素多少 - px:像素点 二.详细说明 1.px和dpi - px: 平常所说的1920×1080只是像素数量 ...
- Android实习生 —— 屏幕适配及布局优化
为什么要进行屏幕适配.对哪些设备进行适配?在近几年的发展当中,安卓设备数量逐渐增长,由于安卓设备的开放性,导致安卓设备的屏幕尺寸大小碎片化极为严重.从[友盟+]2016年手机生态发展报告H1中看截止1 ...
- android自适应屏幕方向和大小
一:不同的layout Android手机 屏幕 大小不一,有480x320, 640x360, 800x480.怎样才能让App自动 适应不同的屏幕 呢? 其实很简单,只需要在res目录下 ...
- android 多屏幕适配 : 第一部分
1.在xml布局文件中,控件的宽度和高度用 dp ; 字体大小用 sp 2.根据屏幕的宽高来动态的适配 , 获取屏幕的宽高的两种方法: 第一种方法: /** * 屏幕的宽度 * 屏幕的高度 * ...
随机推荐
- PM2 & chmod +x
PM2 https://www.npmjs.com/package/pm2 https://github.com/Unitech/pm2 docs https://pm2.io/doc/en/runt ...
- 转载 - Struts2基于XML配置方式实现对action的所有方法进行输入校验
出处:http://www.cnblogs.com/Laupaul/archive/2012/03/15/2398360.html http://www.blogjava.net/focusJ/arc ...
- SGU - 321 - The Spy Network
先上题目: 321. The Spy Network Time limit per test: 0.5 second(s)Memory limit: 65536 kilobytes input: st ...
- Maven奇怪的问题,当找不到Maven输出的提示错误时可以试下这个方法
Maven有时会输出一些奇怪的错误,尤其是用Eclipse自动下载的包,然后根据提示的错误在网上找不到时,可以试下直接删除.m2文件夹,即本地仓库.然后再重新在控制台下执行打包命令来下载包.
- 15、Java并发性和多线程-线程通讯
以下内容转自http://ifeve.com/thread-signaling/: 线程通信的目标是使线程间能够互相发送信号.另一方面,线程通信使线程能够等待其他线程的信号. 例如,线程B可以等待线程 ...
- 条款50: 提高对C++的认识
class Base { public: virtual void f(int x); }; class Derived: public Base { public: virtual void f(d ...
- 我的CSDN博客停止更新通告
我的CSDN博客停止更新通告 自从2001年在CSDN发表第一篇博客開始,至今天(2014年6月11日)为止,算起来我己经在CSDN博客上"呆"了13年.共发表251篇原创文章,有 ...
- cookie知识点简点
cookie几大作用: 1.保持用户登陆状态 2.跟踪用户行为 3.制定页面 4.创建购物车 cookie缺点: 1. 可能被禁用 2.可能被删除:cookie是一个文件,easy被用户删除 3.安全 ...
- 【总结】设备树语法及常用API函数【转】
本文转载自:http://blog.csdn.net/fengyuwuzu0519/article/details/74352188 一.DTS编写语法 二.常用函数 设备树函数思路是:uboot ...
- jsp注释前台不可见
<%-- <div class="content"></div> --%>