Android 屏幕分辨率
发布日期:2021-11-12 07:57:32 浏览次数:37 分类:技术文章

本文共 1991 字,大约阅读时间需要 6 分钟。

原文地址:http://blog.csdn.net/aqi00/article/details/50035541

在app编码中经常需要获取手机的屏幕分辨率(宽*高),原来我直接上网拷贝代码,但在使用过程中却发现诸多不便。
不便一:下面代码中的getWidth和getHeight在adt上提示deprecated已经废弃了,实在扎眼

[java]   
  1. WindowManager wm = getWindowManager();      
  2. Display display = wm.getDefaultDisplay();     
  3. int screenWidth = display.getWidth();      
  4. int screenHeight = display.getHeight();    


查看android源码说可使用getSize替代,于是换成getSize并把代码提炼到工具类中

[java]   
  1. public static Point getSize(Activity act) {  
  2.     Display display = act.getWindowManager().getDefaultDisplay();  
  3.     Point size = new Point();  
  4.     display.getSize(size);  //size.x就是宽度,size.y就是高度  
  5.     return size;  
  6. }  



用了一阵发现又有不便,原因是getWindowManager方法只能在activity中使用或者被activity实例调用,那像我们在Fragment或者Adapter中想获得屏幕分辨率,又有困难了(因为Fragment和Adapter一般只有Context),虽然可以通过强制类型转换来处理,可是毕竟劳民伤财需要时时记得去转换。所以又改了从Context获取系统服务,然后再去取分辨率,改后的代码如下

[java]   
  1. public static Point getSize(Context ctx) {  
  2.     WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);  
  3.     Display display = wm.getDefaultDisplay();  
  4.     Point size = new Point();  
  5.     display.getSize(size);  
  6.     return size;  
  7. }  



再后来发现通过DisplayMetrics也能获取分辨率,依网上的做法照猫画虎如下:

[java]   
  1. public static Point getSizeNew(Context ctx) {  
  2.     WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);  
  3.     DisplayMetrics dm = new DisplayMetrics();  
  4.     wm.getDefaultDisplay().getMetrics(dm);  
  5.     Point size = new Point();  
  6.     size.x = dm.widthPixels*dm.density;  
  7.     size.y = dm.heightPixels*dm.density;  
  8.     return size;  
  9. }  



不久便发现这个新方法时常量错了,找来找去又自己反复实践,结果确认widthPixels和heightPixels就是宽和高,无需再乘上density。因为widthPixels和heightPixels的单位都是像素,而density指的是像素密度,即一个单位内有几个像素,所以在我这边乘上density没有意义,只有除以density才有意义。dm.widthPixels/dm.density指的是宽度上有多少单位,dm.heightPixels/dm.density指的是高度上有多少单位。网上乘以density的做法,可能只是他们恰好遇上部分特殊机型罢了。最后的代码如下:

[java]   
  1. public static Point getSizeNew(Context ctx) {  
  2.     WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);  
  3.     DisplayMetrics dm = new DisplayMetrics();  
  4.     wm.getDefaultDisplay().getMetrics(dm);  
  5.     Point size = new Point();  
  6.     size.x = dm.widthPixels;  
  7.     size.y = dm.heightPixels;  
  8.     return size;  
  9. }  

转载地址:https://blog.csdn.net/happy_love1990/article/details/76599162 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Android 活用提示窗Toast和Snackbar
下一篇:Android 特别的.9图片

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年03月14日 00时13分55秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

java按钮退出_java – 如何在此程序中添加退出按钮?怎么样“清楚”? 2019-04-21
python土味情话_Python 将土味情话语录设置为桌面壁纸 2019-04-21
bootstrap加载mysql数据库_bootstrap后台管理系统前后台实现(含数据库) 2019-04-21
幻兽天下修复版java_宠物天下四-幻兽天下 2019-04-21
java ip 范围内打卡_定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内 2019-04-21
与java线程有关的,线程多少和什么有关?大神们表示有话要说! 2019-04-21
php正则表达式 匹配数字,正则表达式之匹配数字范围 2019-04-21
php中带?错误,参考-此错误在PHP中意味着什么? 2019-04-21
php生成链接列表,根据URL链接和抛文本生成链接<a>标签的PHP函数 2019-04-21
matlab里inline定义矩阵,Matlab中的inline函数_matlab中inline函数 2019-04-21
php html标签自定义属性,浅谈JS读取DOM对象(标签)的自定义属性 2019-04-21
如何使用matlab的siso,利用Matlab内建程式SISODesignTool完成系统分析(Matlab61)开启.PDF... 2019-04-21
php 实现 model层,Thinkhphp5控制器调用的Model层的方法总结 2019-04-21
matlab6.0序列号,MFC软件获取USB设备的制造商、产品、序列号 2019-04-21
matlab中多边形滤波器,几种常见空间滤波器MATLAB实现 2019-04-21
matlab fminimax 例子,Matlab应用实例(8)—fminimax 2019-04-21
php://filter利用条件,浅谈php://filter技巧 2019-04-21
mplayer-php,mplayer+smplayer 前后端播放器安装 2019-04-21
oracle昨日时间,。。今日,昨日,上周,本月,本年,按时间统计总金额 2019-04-21
php验证卡号,PHP验证信用卡卡号是否正确函数 2019-04-21