Android 为什么计算不出准确的屏幕尺寸的原因,及 Android 获得屏幕物理尺寸、密度及分辨率
2015-08-06 16:48
1091 查看
DPI:dots-per-inch,每英寸的像素数量,也就是说,密度越大,每英寸内容纳的点数就越多。这个值是设备自己决定并写死的。
计算方法:获取到屏幕的分辨率:point.x和point.y,再取出屏幕的DPI(每英寸的像素数量),计算长和宽有多少英寸,即:point.x / dm.xdpi,point.y / dm.ydpi,屏幕的长和宽算出来了,再用勾股定理,计算出斜角边的长度,即屏幕尺寸。
上面说到,DPI是由设备出厂时写死到设备里的,如果写入的DPI值不准确,当然计算不出准确的屏幕尺寸。这也是友盟统计里没有屏幕尺寸这一项的原因吧,所以计算出的屏幕尺寸只做参考。
计算方法:获取到屏幕的分辨率:point.x和point.y,再取出屏幕的DPI(每英寸的像素数量),计算长和宽有多少英寸,即:point.x / dm.xdpi,point.y / dm.ydpi,屏幕的长和宽算出来了,再用勾股定理,计算出斜角边的长度,即屏幕尺寸。
WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics displaysMetrics = new DisplayMetrics(); manager.getDefaultDisplay().getMetrics(displaysMetrics); Point point = new Point(); manager.getDefaultDisplay().getRealSize(point); DisplayMetrics dm = context.getResources().getDisplayMetrics(); double x = Math.pow(point.x / dm.xdpi, 2); double y = Math.pow(point.y / dm.ydpi, 2); double screenInches = Math.sqrt(x + y);注意: 此处displayMetrics不要使用context.getApplicationContext().getResources().getDisplayMetrics()来获取。
上面说到,DPI是由设备出厂时写死到设备里的,如果写入的DPI值不准确,当然计算不出准确的屏幕尺寸。这也是友盟统计里没有屏幕尺寸这一项的原因吧,所以计算出的屏幕尺寸只做参考。
相关文章推荐
- Android studio 初始设置
- Android性能优化
- Android典型界面设计(4)——使用ActionBar+Fragment实现tab切换
- Android JNI MAC OS环境配置
- Android基本调试方法
- Android 内存使用分析 Investigating Your RAM Usage
- android 多媒体几个不错的博客
- android自定义view组件circleprogress阅读笔记
- Android自动检测更新功能
- Fragment 学习小结
- 增加 addDataScheme("file") 才能收到SD卡插拔事件的原因分析 -- 浅析android事件过滤策略
- Android之Wifi模块开发
- Android音乐编程:管理音频焦点
- 使用Volley获取多个cookie
- android shape的使用详解以及常用效果(渐变色、分割线、边框、半透明阴影效果等)
- Android Studio之彻底删除项目
- Android MediaScanner 详尽分析
- Android应用安全之第三方SDK安全
- Android-Universal-Image-Loader的使用注意事项
- Android定位SDK