多语言展示
当前在线:1169今日阅读:39今日分享:10

Android开发如何获取屏幕的分辨率?

在android应用开发过程中,我们经常需要获取手机屏幕的分辨率(宽*高)。我们直接上网copy代码,但在使用过程中却发现诸多不便。下面我总结下,获取屏幕分辨率的几个方法.
工具/原料

android studio

方法/步骤
1

我们在网上看得最多的应该是以下这个方法:WindowManager wm = getWindowManager();      Display display = wm.getDefaultDisplay();     int screenWidth = display.getWidth();      int screenHeight = display.getHeight();   但studio提示它已经过时了,建议不再使用。

2

再去查看android源码,发现可使用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;  }

3

一段时间后发现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;  }

4

再后来发现通过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;  }

5

不久便发现这个新方法时常量错了,结果确认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;  }

推荐信息