网上很多解说挺混的,备忘一下。
获取屏幕参数代码:
DisplayMetrics metric = new DisplayMetrics(); //API 17之后使用,获取的像素宽高包含虚拟键所占空间,在API 17之前通过反射获取 context.getWindowManager().getDefaultDisplay().getRealMetrics(metric); //获取的像素宽高不包含虚拟键所占空间 //context.getWindowManager().getDefaultDisplay().getMetrics(metric); int width = metric.widthPixels; // 宽度(像素) int height = metric.heightPixels; // 高度(像素) float density = metric.density; // dp缩放因子 int densityDpi = metric.densityDpi; // 广义密度 float xdpi = metric.xdpi;//x轴方向的真实密度 float ydpi = metric.ydpi;//y轴方向的真实密度
getRealMetrics()和getMetrics()获取到的屏幕信息差别只在于widthPixels或heightPixels的值是否去除虚拟键所占用的像素,和是否全屏和沉浸模式无关。
屏幕高度值包含了状态栏的像素,非沉浸模式下真实的Activity高度需要减去状态栏的高度。获取状态栏高度代码:
private int getStatusBarHeight() { Rect rect = new Rect(); getWindow().getDecorView().getWindowVisibleDisplayFrame(rect); return rect.top; }
屏幕参数Width和Height的值和屏幕方向有关,另外4个值和屏幕方向无关。
术语解析1:
像素(Pixel):屏幕绘制的最小单位,无论在开发时使用什么尺寸单位,最终都需要转为像素。下简称px。
密度无关像素(Density independent pixel,简称dip/dp):简单来说是一个物理尺寸单位,宽高具有相同dp值的widget在不同屏幕上的物理尺寸是相同的(但实际上可能是近似,因为Android设备使用广义密度而不是真实密度,下面会讲述),和屏幕尺寸以及分辨率没有关系。下简称dp。
屏幕大小(Screen size):如果没特别说明,屏幕大小是指其对角线长度,单位为英寸。
屏幕密度(Dots per inch,简称Dpi):屏幕每英寸上有多少个px点。计算公式:sqrt(widthPixels *widthPixels + heightPixels * heightPixels) / screenSize
密度无关像素(Density independent pixel,简称dip/dp):简单来说是一个物理尺寸单位,宽高具有相同dp值的widget在不同屏幕上的物理尺寸是相同的(但实际上可能是近似,因为Android设备使用广义密度而不是真实密度,下面会讲述),和屏幕尺寸以及分辨率没有关系。下简称dp。
屏幕大小(Screen size):如果没特别说明,屏幕大小是指其对角线长度,单位为英寸。
屏幕密度(Dots per inch,简称Dpi):屏幕每英寸上有多少个px点。计算公式:sqrt(widthPixels *widthPixels + heightPixels * heightPixels) / screenSize
为什么Android要使用dp而不是传统的px作为widget长度单位:
Android的主要交互是触控,而人的手指头大小变化范围比较小。如果以px作为长度单位,在一个大屏幕低分屏上可以正常触控的按钮,换到一个一个小屏幕高分屏上可能很难按到(因为物理尺寸变小了,手指头可不能跟着变小),所以需要使用一个和屏幕参数无关的单位,维持交互控件的物理尺寸。
相关推荐
Android学习笔记(一)——创建第一个Android项目 Android学习笔记(二)android studio基本控件及布局(实现图片查看器) Android学习笔记(三)android studio中CheckBox自定义样式(更换复选框左侧的勾选图像) ...
Android学习笔记——获取网络图片并显示
Android Training学习笔记——Navigation 参考源码,文章地址:http://blog.csdn.net/xroocky/article/details/50804762
Android开发者学习笔记——View、Canvas、bitmap
之前博文《 Android学习笔记之——Android Studio的安装(3.6版本)、Java的基本语法及Android的概述 》曾经介绍过android有四大组件。本博文学习一下Content Providers(内容提供器) 目录 Android运行时 ...
Android Training学习笔记——App Bar 参考源码,文章地址:http://blog.csdn.net/xroocky/article/details/50612401
Android Training学习笔记——Navigation 参考源码,文章地址:http://blog.csdn.net/xroocky/article/details/50767844
Android Training学习笔记——Navigation 参考源码,文章地址:http://blog.csdn.net/xroocky/article/details/50767844
Android Training学习笔记——Navigation 参考源码,文章地址:http://blog.csdn.net/xroocky/article/details/50767844
此篇Android学习笔记的源码主要内容: 1.使用WebView控件加载网页 2.使用ImageView控件加载网络图片
Android学习笔记(一)——创建第一个Android项目 Android学习笔记(二)android studio基本控件及布局(实现图片查看器) Android学习笔记(三)android studio中CheckBox自定义样式(更换复选框左侧的勾选图像) ...
Android学习笔记(十)——使用意图链接活动 完整代码
Android学习笔记(十一)——从意图返回结果 完整代码~
NULL 博文链接:https://showmo.iteye.com/blog/1292615
之前博文《 Android学习笔记之——Content Providers》曾经介绍过将联系人的信息读入,然后显示。其实本博文就很像了hhh 在博文《Android学习笔记之——获取WIFI的RSSI以及名称》已经实现了获取wifi的名称以及其...
Android学习笔记(九)——更复杂的进度对话框 完整代码,显示操作进度的进度对话框~
Android学习笔记(十六)——碎片之间进行交互(附源码) 文章内容源码,文章地址:http://blog.csdn.net/zenail501129
Android学习笔记(十二)——使用意图传递数据的几种方式 完整代码