Android DisplayMetrics 详解
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 详解相关推荐
- 【转】Android菜单详解——理解android中的Menu--不错
原文网址:http://www.cnblogs.com/qingblog/archive/2012/06/08/2541709.html 前言 今天看了pro android 3中menu这一章,对A ...
- Android菜单详解——理解android中的Menu
前言 今天看了pro android 3中menu这一章,对Android的整个menu体系有了进一步的了解,故整理下笔记与大家分享. PS:强烈推荐<Pro Android 3>,是我至 ...
- Android LayoutInflater详解
Android LayoutInflater详解 在实际开发中LayoutInflater这个类还是非常有用的,它的作用类 似于findViewById().不同点是LayoutInflater是用来 ...
- android Fragments详解
android Fragments详解一:概述 android Fragments详解二:创建Fragment 转载于:https://my.oschina.net/liangzhenghui/blo ...
- android WebView详解,常见漏洞详解和安全源码(下)
上篇博客主要分析了 WebView 的详细使用,这篇来分析 WebView 的常见漏洞和使用的坑. 上篇:android WebView详解,常见漏洞详解和安全源码(上) 转载请注明出处:http ...
- android WebView详解,常见漏洞详解和安全源码(上)
这篇博客主要来介绍 WebView 的相关使用方法,常见的几个漏洞,开发中可能遇到的坑和最后解决相应漏洞的源码,以及针对该源码的解析. 由于博客内容长度,这次将分为上下两篇,上篇详解 WebView ...
- android子视图无菜单,Android 菜单详解
Android中菜单分为三种,选项菜单(OptionMenu),上下文菜单(ContextMenu),子菜单(SubMenu) 选项菜单 可以通过两种办法增加选项菜单,一是在menu.xml中添加,该 ...
- Android StateFlow详解
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/121913352 本文出自[赵彦军的博客] 文章目录 系列文章 一.冷流还是热流 S ...
- Android SharedFlow详解
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/121911675 本文出自[赵彦军的博客] 文章目录 系列文章 什么是SharedF ...
最新文章
- 点击定位到指定位置_以三菱PLC来举例说明相对定位与绝对定位指令
- scala连接postgre数据库
- Yammer从Scala转向Java
- 模拟实现priority_queue优先级队列
- Linux 命令 之 【stat】 查看文件状态。 (包括修改时间)
- 中间表为什么可以不用实体类_法国蜗牛供不应求,为什么不用中国蜗牛代替?看完才知道真不可以...
- carmaker的弱智算法
- 服务器全息显示修改,全息显示
- FL studio 20简易入门教程 -- 第六篇 -- 调音台和自动化包络线
- html中用于超链接的标签,html中,超链接用的是什么标签
- ios微信小程序下拉刷新怎么配_微信小程序之上拉加载与下拉刷新
- 萨塞克斯大学计算机专业,萨塞克斯大学高级计算机科学专业
- React路由官方网站
- Eclipse代码提示和补全
- OC视频笔记7(自定义初始化方法)8(类方法与实例方法的区别)(为什么NSString后面加*)
- DialogFragment 顶部弹出 设置距离顶部的距离
- 实现在线预览PDF的几种解决方案
- Linux常见命令 24 - RPM命名管理-包命名与依赖性
- ACP_1_敏捷价值观原则
- Java8新特性 - 04 - 方法引用05 - 方式四 【类名::new】