繁体   English   中英

以Xamarin形式获取正确的设备宽度

[英]Get correct device width in Xamarin forms

在我的Xamarin Forms项目中使用Xamarin实验室,它有一个类,您可以使用它来请求有关应用程序所在的运行设备的信息。

在我的情况下,我想知道设备屏幕的当前宽度。 要实现这一点,您需要在iOS appdelegate中连接IDisplay界面,以便您可以在表单代码中使用它。

所以在我的表单代码中,我通过请求Resolver.Resolve<IDevice>.Display.WidthResolver.Resolve<IDevice>.Display.XDpi获取宽度。

现在,当在iPhone 6模拟器上运行时,我的宽度为750,XDpi为326。 我现在要做的是使用这两个值中的一个来调整屏幕上的图像大小,以便它们具有屏幕的确切宽度。

var image = new Image (){ Source = "img1.jpg", WidthRequest = _display.Width });

我在ExtendedScrollView显示它们

<StackLayout>
    <controlsXLabs:ExtendedScrollView x:Name="ImageScrollView"
                                      Orientation="Horizontal"
                                      AnimateScroll="true"
                                      Scrolled="OnScrolled">
        <StackLayout x:Name="DiscoverImagesStackLayout" Orientation="Horizontal" />
    </controlsXLabs:ExtendedScrollView>
    <Button Text="Click me" Clicked="OnButtonClicked" />
</StackLayout>

但我现在面临的问题是使用宽度(750)是大(视网膜缩放?)和使用XDpi是小!

换句话说,如何获得可用于匹配图像宽度的实际屏幕宽度? 或者我做错了什么?

添加了截图,第一个是大,第二个是小(参考屏幕大小)

Display.Width(大)

Display.XDpi(小)

看起来Xamarin Forms XAML布局使用iOS的点进行测量 - 也就是说,虚拟分辨率然后按比例放大以匹配设备的物理像素。

但是,您使用的Xamarin Forms Labs IDisplay界面返回宽度/高度值是物理像素,这就是为什么一切看起来都那么大。 幸运的是,它似乎有一个Scale属性,这是当光栅过程想要组成最终的物理图像时应用于虚拟分辨率的乘数。

因此,只需按Display.Scale划分Display.WidthDisplay.Height ,您将获得设备的合成图层用于视口大小的尺寸 - 在您的情况下,它应该是自iPhone以来375点/虚拟单位的宽度6比例乘数是2。

如果您想了解有关iOS的虚拟分辨率如何与物理屏幕大小相对应的更多信息,您可以在此链接中找到非常详细的原理图。

暂无
暂无

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

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