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

标签 android android-4.4-kitkat samsung-mobile galaxy dpi

我们最近注意到一个数据异常,许多设备通过 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 文档没有记录这些不可靠的属性这一事实对我来说似乎是非常不负责任的。

最佳答案

从 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 - 运行 4.4.2 的 SPH-L710 (Sprint Galaxy S III) 误报 xdpi 和 ydpi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26849812/

相关文章:

java - 通过 Intent 调用类

android - 屏幕锁定时,来自服务的对话框未显示在 Lollipop 上

java - ListView 项目 state_selected 在真实设备上丢失

android - 使用自己的内存空间启动 Activity 或 Service

android - android 设备的 html 和 css 中的对齐问题

android - 在启动时将应用程序锁定到当前屏幕方向

android - API 19 ScrollView 没有动量

android - 使用 KitKat Transitions Framework 时如何实现后退堆栈

android-4.4-kitkat - 使用 webchromeclient 在 android 4.4+ 上的 webview 中打开一个 youtube 页面并在同一窗口中播放视频

android - wlan.ko在三星9500或其他三星手机上的路径是什么?