繁体   English   中英

当您可以设置不同的屏幕分辨率时,如何可靠地计算屏幕尺寸/屏幕缩放级别?

[英]How to reliably calculate the screen size / screen zoom level when you can set different screen resolutions?

有没有办法可靠地计算屏幕尺寸/屏幕缩放级别,可以在设置应用程序-> 显示中更改?

我在这里发现您可以使用DisplayMetrics.DENSITY_DEVICE_STABLEdensityDpi来计算“缩放级别”。 这通常适用于大多数设备,但不适用于您可以更改分辨率的某些三星设备。

在三星 Galaxy S10 和分辨率设置为 FHD+ 上:

  • DENSITY_DEVICE_STABLE 报告 420
  • 标准显示缩放:densityDpi 报告 420
  • 下一个缩放级别: densityDpi 报告 450

420 / 420 = 1

450 / 420 = 1.0714285

按预期工作,耶!

现在我们改变分辨率:

三星 Galaxy S10 和分辨率设置为 WQHD+:

  • DENSITY_DEVICE_STABLE 报告 420
  • 标准显示缩放:densityDpi 报告 560

560 / 420 = 1.3333334

我们无法可靠地计算缩放级别,因为 densityDpi 在不同分辨率下报告相同缩放级别的不同值,但 DENSITY_DEVICE_STABLE 保持不变,无论设置什么分辨率。

还有其他方法可以做到这一点吗?

我想我自己找到了“问题”。 似乎您必须自己处理活动的密度变化。 当您将以下行添加到清单中时,应用程序 UI 会根据密度调整大小并且不会保持不变。 因此 DisplayMetrics.DENSITY_DEVICE_STABLE 和 resources.displayMetrics.densityDpi 的值都是正确的,但在 UI 中不可见,因为系统会自动处理缩放。

只需添加

android:configChanges="density|fontScale"

并更改分辨率。 现在您应该能够看到 UI 已“正确”缩放。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM