在Android应用开发过程中我们会经常遇到需要通过获取屏幕尺寸来设置某些控件的大小、显示不同尺寸图片等需求。而我们通常会想到并使用的方法是:
- DisplayMetrics displayMetrics = new DisplayMetrics();
- display.getMetrics(displayMetrics);
- float width = displayMetrics.widthPixels;
- float height = displayMetrics.heightPixels;
其实在好长一段时间里我也是这样使用的,但有一天突然发现我们的应用从服务器拉取到的启动页显示有些模糊(应用的启动页是根据客户端屏幕的分辨率来从服务器拉取不同尺寸的图片得到的),通过日志跟踪发现通过上面的方法在分辨率为1280*720的Galaxy Nexus手机上获取到的宽高不是1280和720而是1184和720。恍然大悟原来通过上面的方法获取到的屏幕分辨率是减掉了虚拟按键一栏的高度的,如果想获取手机真正的尺寸需要使用下面的方法:
- DisplayMetrics dm = new DisplayMetrics();
- try
- {
- Class c = Class.forName("android.view.Display");
- Method method = c.getMethod("getRealMetrics", DisplayMetrics.class);
- method.invoke(display, dm);
- float width = dm.widthPixels;
- float height = dm.heightPixels;
- }
- catch (Exception e)
- {
- e.printStackTrace();