android – SPH-L710(Sprint Galaxy S III)运行4.4.2误报xdpi和ydpi

我们最近注意到一个数据异常,因为许多设备通过displayMetrics误报了他们的xdpi和ydpi.

作为一个具体的例子,运行4.4.2的所有SPH-L710 Sprint galaxy S III设备报告的xdpi和ydpi为~160.分辨率为1280×720,这将测量到~9英寸的屏幕尺寸,显然不是这种情况.在4.4.2之前,该设备模型分别正确报告其xdpi和ydpi:~304和~306.

我们通过displayMetrics访问此信息,如下所示:

displayMetrics dm = getResources().getdisplayMetrics();
xdpi = dm.xdpi;
ydpi = dm.ydpi;

有没有人注意到这些指标是不一致/不可靠的?有更准确的方法来访问这些信息吗?

编辑:我发现有关xdpi / ydpi不准确的this post. Romain和Dianne似乎都承认这个问题 – 因此displayMetrics文档没有记录这些不可靠的属性这一事实对我来说似乎是不负责任的.

解决方法

从API 17开始,您可以调用getRealMetrics以获得更准确的结果.
displayMetrics dm = new displayMetrics();
getwindowManager().getDefaultdisplay().getRealMetrics(dm);

xdpi = dm.xdpi;
ydpi = dm.ydpi;

From Display documentation

public void getRealMetrics (displayMetrics outMetrics)

Added in API level 17 Gets display metrics based on the real size of
this display.

The size is adjusted based on the current rotation of the display.

The real size may be smaller than the physical size of the screen when
the window manager is emulating a smaller display (using adb shell am
display-size).

Parameters outMetrics A displayMetrics object to receive the metrics.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...