我们最近注意到一个数据异常,因为许多设备通过DisplayMetrics误报了他们的xdpi和ydpi。
作为一个具体示例,运行4.4.2的所有SPH-L710 Sprint Galaxy S III设备报告的xdpi和ydpi为~160。分辨率为1280x720,这可以测量到~9英寸的屏幕尺寸,显然不是这种情况。在4.4.2之前,该设备模型分别正确报告其xdpi和ydpi:~304和~306。
我们通过DisplayMetrics访问此信息,如下所示:
DisplayMetrics dm = getResources().getDisplayMetrics();
xdpi = dm.xdpi;
ydpi = dm.ydpi;
是否有其他人注意到这些指标不一致/不可靠?有更准确的方法来访问这些信息吗?
编辑:我发现this post有关xdpi / ydpi的不准确之处。 Romain和Dianne似乎都承认这个问题 - 所以DisplayMetrics文档没有记录这些不可靠的属性这一事实对我来说似乎是不负责任的。
答案 0 :(得分:1)
从API 17,您可以致电getRealMetrics
以获得更准确的结果。
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getRealMetrics(dm);
xdpi = dm.xdpi;
ydpi = dm.ydpi;
public void getRealMetrics(DisplayMetrics outMetrics)
在API级别17中添加获取基于实际大小的显示度量标准 这个显示。
根据显示器的当前旋转调整尺寸。
实际尺寸可能小于屏幕的物理尺寸 窗口管理器正在模拟一个较小的显示器(使用adb shell am 显示尺寸)。
参数outMetrics用于接收指标的DisplayMetrics对象。