DisplayMetrics信息获取:

//Display屏幕显示的详细信息
Display display = getWindowManager().getDefaultDisplay();
//从Display获取DisplayMetrics信息
DisplayMetrics metrics = new DisplayMetrics();
display.getMetrics(metrics);
//上面获取的DisplayMetrics只可读,
//第二种获取DisplayMetrics的方式,可修改里面的参数
context.getResources().getDisplayMetrics()

实际屏幕的DisplayMetrics信息

机型 屏幕尺寸 widthPixels heightPixels density densityDpi scaledDensity xdpi ydpi
小米4C 4.9英寸 1080 1920 3.0 480 3.0 449.704 447.412
小米mix2 5.99英寸 1080 2160 2.75 440 2.75 403.411 403.411

首先160dpi是google定义的一个密度标准,dpi就是dots_per_inch,

  • widthPixels:宽度 显示的数值是1080,就是说屏幕的宽度是1080px
  • heightPixels:高度
  • densityDpi:密度
  • density:密度比值(密度/标准密度,即480/160=3),单位英寸下可以容纳多少个点
  • scaledDensity:同density,用于文字缩放的计算也就是sp
  • xDpi:水平方向的真实密度,水平方向上1inch实际上容纳的点的数量
  • yDpi:垂直方向的真实密度

densityDpi和density关系:

density就是densityDpi除以标准密度160的出来的一个比值(参考上图),主要用于常用dp的计算,比如小米4c控件宽设为360dp的话,换算成像素就是1080px就是全屏了。

densityDpi和xDpi、yDpi的关系:

xDpi和yDpi是屏幕真实的屏幕密度,如上面小米mix2获取是403.411,而小米宣传的mix2屏幕密度就是403ppi,densityDpi大概是厂家设定的一个值,界面适配基本也只会使用densityDpi

屏 幕 密 度 = 屏 幕 对 角 线 的 像 素 点 数 量 屏 幕 尺 寸 屏幕密度 = \frac {屏幕对角线的像素点数量}{屏幕尺寸} 屏幕密度=屏幕尺寸屏幕对角线的像素点数量​

public static float applyDimension(int unit, float value,DisplayMetrics metrics) {switch (unit) {case COMPLEX_UNIT_PX:return value;case COMPLEX_UNIT_DIP:return value * metrics.density;case COMPLEX_UNIT_SP:return value * metrics.scaledDensity;case COMPLEX_UNIT_PT:return value * metrics.xdpi * (1.0f / 72);case COMPLEX_UNIT_IN:return value * metrics.xdpi;case COMPLEX_UNIT_MM:return value * metrics.xdpi * (1.0f / 25.4f);}return 0;}

Android DisplayMetrics 详解相关推荐

  1. 【转】Android菜单详解——理解android中的Menu--不错

    原文网址:http://www.cnblogs.com/qingblog/archive/2012/06/08/2541709.html 前言 今天看了pro android 3中menu这一章,对A ...

  2. Android菜单详解——理解android中的Menu

    前言 今天看了pro android 3中menu这一章,对Android的整个menu体系有了进一步的了解,故整理下笔记与大家分享. PS:强烈推荐<Pro Android 3>,是我至 ...

  3. Android LayoutInflater详解

    Android LayoutInflater详解 在实际开发中LayoutInflater这个类还是非常有用的,它的作用类 似于findViewById().不同点是LayoutInflater是用来 ...

  4. android Fragments详解

    android Fragments详解一:概述 android Fragments详解二:创建Fragment 转载于:https://my.oschina.net/liangzhenghui/blo ...

  5. android WebView详解,常见漏洞详解和安全源码(下)

    上篇博客主要分析了 WebView 的详细使用,这篇来分析 WebView 的常见漏洞和使用的坑.  上篇:android WebView详解,常见漏洞详解和安全源码(上)  转载请注明出处:http ...

  6. android WebView详解,常见漏洞详解和安全源码(上)

    这篇博客主要来介绍 WebView 的相关使用方法,常见的几个漏洞,开发中可能遇到的坑和最后解决相应漏洞的源码,以及针对该源码的解析.  由于博客内容长度,这次将分为上下两篇,上篇详解 WebView ...

  7. android子视图无菜单,Android 菜单详解

    Android中菜单分为三种,选项菜单(OptionMenu),上下文菜单(ContextMenu),子菜单(SubMenu) 选项菜单 可以通过两种办法增加选项菜单,一是在menu.xml中添加,该 ...

  8. Android StateFlow详解

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/121913352 本文出自[赵彦军的博客] 文章目录 系列文章 一.冷流还是热流 S ...

  9. Android SharedFlow详解

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/121911675 本文出自[赵彦军的博客] 文章目录 系列文章 什么是SharedF ...

最新文章

  1. 点击定位到指定位置_以三菱PLC来举例说明相对定位与绝对定位指令
  2. scala连接postgre数据库
  3. Yammer从Scala转向Java
  4. 模拟实现priority_queue优先级队列
  5. Linux 命令 之 【stat】 查看文件状态。 (包括修改时间)
  6. 中间表为什么可以不用实体类_法国蜗牛供不应求,为什么不用中国蜗牛代替?看完才知道真不可以...
  7. carmaker的弱智算法
  8. 服务器全息显示修改,全息显示
  9. FL studio 20简易入门教程 -- 第六篇 -- 调音台和自动化包络线
  10. html中用于超链接的标签,html中,超链接用的是什么标签
  11. ios微信小程序下拉刷新怎么配_微信小程序之上拉加载与下拉刷新
  12. 萨塞克斯大学计算机专业,萨塞克斯大学高级计算机科学专业
  13. React路由官方网站
  14. Eclipse代码提示和补全
  15. OC视频笔记7(自定义初始化方法)8(类方法与实例方法的区别)(为什么NSString后面加*)
  16. DialogFragment 顶部弹出 设置距离顶部的距离
  17. 实现在线预览PDF的几种解决方案
  18. Linux常见命令 24 - RPM命名管理-包命名与依赖性
  19. ACP_1_敏捷价值观原则
  20. Java8新特性 - 04 - 方法引用05 - 方式四 【类名::new】

热门文章

  1. element 添加 五角星
  2. Checkra1n越狱发布日期确定,Pwn20越狱A12/A13芯片的越狱建议
  3. Python爬取小姐姐内衣信息,寻找小姐姐们的偏好
  4. 区县公安合成作战中心调研:(二)模式适用性
  5. 防水蓝牙耳机排行榜,值得选购的四款蓝牙耳机分享
  6. Visual C++使用入门级教程
  7. 电脑windows系统同时打开多个微信方法,微信双开,微信多开
  8. 用python绘制树和森林_使用Python的Turtle库绘制森林的实例
  9. 【原】设计稿中字体pt与px之间的转化
  10. Xbox Game Bar 实时显示帧数方法| Win10开启自带FPS显示