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

  WindowManager wm = getWindowManager();    Display display = wm.getDefaultDisplay();   int screenWidth = display.getWidth();    int screenHeight = display.getHeight();  

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

 public static Point getSize(Activity act) {Display display = act.getWindowManager().getDefaultDisplay();Point size = new Point();display.getSize(size);  //size.x就是宽度,size.y就是高度return size;}

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

 public static Point getSize(Context ctx) {WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);Display display = wm.getDefaultDisplay();Point size = new Point();display.getSize(size);return size;}

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

 public static Point getSizeNew(Context ctx) {WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);DisplayMetrics dm = new DisplayMetrics();wm.getDefaultDisplay().getMetrics(dm);Point size = new Point();size.x = dm.widthPixels*dm.density;size.y = dm.heightPixels*dm.density;return size;}

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

 public static Point getSizeNew(Context ctx) {WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);DisplayMetrics dm = new DisplayMetrics();wm.getDefaultDisplay().getMetrics(dm);Point size = new Point();size.x = dm.widthPixels;size.y = dm.heightPixels;return size;}

点此查看Android开发笔记的完整目录

Android开发笔记(三)屏幕分辨率相关推荐

  1. android开发获取手机屏幕分辨率

    android开发基础过程中获取手机屏幕分辨率用来加载不同的UI,图片等,如何获取手机屏幕分辨率? DisplayMetrics displayMetrics=new DisplayMetrics() ...

  2. Android开发笔记(八十一)屏幕规格适配

    Configuration 适配各种屏幕规格,首先要取到系统对于屏幕的配置信息,这些配置可从工具类Configuration获得.Configuration对象在Activity中通过调用getRes ...

  3. Android开发笔记(一百三十一)水波图形与水波动画

    水波图形RippleDrawable RippleDrawable是Android在5.0之后新增的图形类,它的作用是在点击时展示水波动画,从而提示用户在这里按压了屏幕.这个提示效果类似于状态图形St ...

  4. Android开发笔记(一百三十九)可定制可滑动的标签栏

    App在页面底部展现标签栏导航的效果,有多种实现方式,包括TabActivity方式.ActivityGroup方式.FragmentActivity方式等等,具体的实现方案参见之前的博文< A ...

  5. Android开发笔记(一百三十八)文本输入布局TextInputLayout

    文本输入布局TextInputLayout TextInputLayout是MaterialDesign库中对编辑框EditText进行增强的一个控件.众所周知,EditText未输入字符时,我们可以 ...

  6. Android开发笔记(一百三十七)自定义行为Behavior

    协调布局CoordinatorLayout能够让内部的子控件互相配合着移动,这跟以往孤立的控件运动截然不同,协调运动的结果,意味着App画面更加流畅.自然,也更符合日常生活中的动作场景.如果你对Coo ...

  7. Android开发笔记(一百三十六)可折叠工具栏布局CollapsingToolbarLayout

    可折叠工具栏布局CollapsingToolbarLayout 上一篇博文< Android开发笔记(一百三十五)应用栏布局AppBarLayout>阐述了如何把Toolbar往上滚动,那 ...

  8. Android开发笔记(一百三十五)应用栏布局AppBarLayout

    应用栏布局AppBarLayout Android5.0推出工具栏Toolbar用来替代ActionBar,灵活性和易用性大大增强,有关Toolbar的详细介绍参见< Android开发笔记(一 ...

  9. Android开发笔记(一百三十三)导航视图NavigationView

    导航视图NavigationView 很多App都有个人中心的侧滑菜单,通常在页面左侧边缘右拉时,即可弹出个人中心的菜单页面.对于Android来说,侧滑功能用到了抽屉布局DrawerLayout,我 ...

最新文章

  1. MySQL太细碎了,我硬生生捋出了一条核心大主线!
  2. 【Google Play】Android 应用用户协议 ( 生成用户协议 | HTML 用户协议模板 | Markdown 用户协议模板 )
  3. 使用JSON.parse(),JSON.stringify()实现对对象的深拷贝
  4. 笔记-信息系统开发基础-信息系统生命周期
  5. 14秋 c 语言程序设计 在线作业1,14秋学期《C语言及程序设计》在线作业
  6. 01_8_Struts用DomainModel接收参数
  7. TypeScript class 的访问控制
  8. render注册一个链接组件_详解vue 动态加载并注册组件且通过 render动态创建该组件...
  9. disruptor小结1--优势
  10. 将txt格式的地图导入到ArcMap
  11. c# 时间格式化为英文_C#格式化英文字母的三种方法
  12. 2022年中国工业机器人市场现状研究分析与发展前景预测报告
  13. 无刷直流电机计算转速
  14. 计算机组成原理复习(第二版)唐朔飞编著(转载请注明出处---https://www.cnblogs.com/qingl)...
  15. ENVI图像处理(1):ENVI影像处理基础
  16. 小学计算机绘图体会,辅导小学生电脑绘画的几点做法
  17. 虚拟机不正常关机,到时无法进入文本界面
  18. word论文排版和写作01:样式、自动列表、图片、表格、公式、脚注、目录、页眉页脚及各种交叉引用
  19. Git生成ssh ksy后进行项目管理
  20. 使用golang发送电子邮件

热门文章

  1. Leetcode每日一题:116.populating-next-right-pointers-in-each-node(填充每个节点的下一个右侧节点指针)
  2. Github的介绍、使用、安装以及个人博客的搭建、美化
  3. 使用webpack引入sass全局变量
  4. Linux 获取grep前后几行
  5. 2种方式解决vue路由跳转未匹配相应路由避免出现空白页面或者指定404页面
  6. LeetCode刷题(23)
  7. catia怎么将特征参数化_CATIA参数化建模及关系式的创建和使用 | 坐倚北风
  8. chrome driver 获取 session_BOSS直聘招聘信息获取之使用webdriver进行爬取
  9. fastjson map转json_Java对象转JSON咋这么头疼?不!那是你还没使用Fastjson
  10. java对字符串快查找_字符串快速查找 - Trie算法