为 iOS 单位定义点高度,为 Android 单位定义 DPI

Define height in Point for iOS and DPI for Android units

我正在 Xamarin 中创建带有矩形的自定义控件。 我在 pcl.

中为矩形高度提供了一个可绑定的 属性

当我在 Android 和 iOS 中传递此高度时,Android 设备(Nexus 5 运行 KitKat)和 iOS 的高度不同(iPhone 5 运行 iOS8.4).

我知道有密度和屏幕分辨率、DPI 和 PT 等概念,但我不知道当我将 100 作为 iOS 和 Android 中矩形的高度时会发生什么.

它认为它是DPI/PT吗?如果没有,我该如何实现?

编辑:

这是 Xamarin Forms 代码。

便携式项目有自定义控件和一个 BindableProperty,其中数据类型为 int,命名为 RectHeight

然后在 Android 和 iOS 的自定义渲染器中,在 OnElementChangedProperty 方法中,我编写代码为 Android 中的 RectCGRect 中的 CGRect 分配高度iOS.

编辑:

我想在自定义控件中以 int 形式提供维度,然后将值放入 Android 和 iOS 中,这样高度在两个操作系统中看起来都一样,无论屏幕分辨率或密度。这就是为什么提到 DPI 和 PT

查看 IDisplay XLabs 上的实现。您可以从 IDevice 实现中获取一个实例。这将为您提供运行时显示属性并提供扩展方法,例如从英寸获取 Forms height/width 请求值。我写它们就是为了这个目的,以确保在我需要它们时获得准确的尺寸。

查看示例 Xamarin Forum thread

您可以使用源代码或从 NuGet 安装 XLabs.Forms 包。为了您的目的,您很可能会使用 XDpi 和 YDpi 属性来计算原始值。如果您不需要任何其他 XLabs 的东西,那么我建议将一些例程(尤其是 iOS 的东西复制到您的代码中,因为 Android 和 WP 在运行时更容易确定)作为扩展可能。