尝试移植一些旧代码,但不确定如何将以英寸为单位定义的屏幕尺寸测量转换为 MAUI 正在使用的单位。似乎
DisplayInfo
的 Width
和 Height
属性和 Density
不足以让我计算全屏页面上的实际宽度/高度单位,我不确定单位是怎么计算的?
MAUI 似乎与此相关的文档可能很少,Xamarin 文档是否仍然相关(正如这个旧答案建议的那样)?很难知道发生了多少变化,而且我可能在某个地方计算错误,但如果我将链接到 的文档以及我的设备不太准确的“Pixel 5”模拟器(分辨率为 1080x2340 和 DPI) 440 个数字的计算结果不太正确。我根据以下测量进行了修改:
DeviceDisplay.Current.MainDisplayInfo.Height: 2340
DeviceDisplay.Current.MainDisplayInfo.Width: 1080
DeviceDisplay.Current.MainDisplayInfo.Density: 2.75
2.75 * 160 = 440dpi, so the density seems to match the docs
2340 / 440 = 5.31818..." tall
1080 / 440 = 2.4545..." wide
5.31818..." * 160dps = 850.9090...dps, should be the full height of the display
2.4545..." * 160dps = 392.7272...dps, should be the full width of the display
但我的观察结果与我的预期不符,所以我在启动页面中添加了一个 override void OnSizeAllocated
,该页面几乎是全高(预计在 850 以上,为通知/操作栏留出一些空间)并写下显示的实际宽度/高度:
OnSizeAllocated, width: 320, height: 654.1818181818181
因此,根据这些测量结果,屏幕似乎只有 2 英寸宽,高度被感知为 4 英寸高。我不知道如何从(Xamarin)文档中预测/计算这些看似任意的差异。 MAUI 改变了行为吗?有什么因素我没有考虑到吗?假设我想指定某些内容的最大宽度为 2.5 英寸,或者如果屏幕高于 5 英寸,则更改某些内容的高度,我将如何表达(最好用 C# 语言,因为此应用程序不使用 XAML) ?如果它有影响的话,我只需要它适用于 iOS 和 Android。或者,如果没有关于我正在寻找的内容的指导,是否有一种简单的跨平台方法来询问设备的物理屏幕尺寸,我可以使用它来更好地简化这些比率?
如果需要将像素尺寸转换为PPI,可以使用公式。它提供自动转换和手动公式。公式为:这就是利用DPI来计算高度和宽度的方式。通常手机厂商都是用PPI来计算像素密度的。
PPI = Diagonal In Pixels / Diagonal In Inches
要计算对角线(以像素为单位),请使用:
Diagonal In Pixels = √(width² + height²)