.NET MAUI:如何预测/计算相对于物理屏幕尺寸的宽度和高度?

问题描述 投票:0回答:1

尝试移植一些旧代码,但不确定如何将以英寸为单位定义的屏幕尺寸测量转换为 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。或者,如果没有关于我正在寻找的内容的指导,是否有一种简单的跨平台方法来询问设备的物理屏幕尺寸,我可以使用它来更好地简化这些比率?

maui maui-android maui-ios
1个回答
0
投票

这就是利用DPI来计算高度和宽度的方式。通常手机厂商都是用PPI来计算像素密度的。

如果需要将像素尺寸转换为PPI,可以使用公式。它提供自动转换和手动公式。公式为:

PPI = Diagonal In Pixels / Diagonal In Inches

要计算对角线(以像素为单位),请使用:
Diagonal In Pixels = √(width² + height²)


© www.soinside.com 2019 - 2024. All rights reserved.