【问题标题】:how to transform a pixel to xamarin.forms units?如何将像素转换为 xamarin.forms 单位?
【发布时间】:2020-12-01 00:48:57
【问题描述】:
  1. 每英寸有 160 个单位。 2.如果我创建了一个 72 dpiPhotoshop 文件,那么每英寸将有 72 个点。 3.如果 Photoshop 中的元素是88px 高度,那么我必须在xamarin 中设置什么?

如果手机是 360dpi 那么 xamarin 中的高度应该是 :88 / 72 * 160 / 2? 但这是不对的。

【问题讨论】:

  • 你从哪里得到 /2? 88 / 72 * 160 = 196 像素
  • 196 应该是单位?我想通过 Photoshop 中的像素获取 Xamarin 中的单位
  • @Jason 我只想从 Photoshop 获取 Xamarin 中的像素单位。
  • @maui 也许这有助于您了解 Xamarin Forms 中的单位。stackoverflow.com/questions/29808498/…
  • @JuniorJiang-MSFT 我知道每个平台的单位,我只想知道如何从像素中获取单位

标签: xamarin.forms


【解决方案1】:

我知道每个平台的单位,我只想知道如何从像素中获取单位

您可以使用Xamarin.Essentials 获取Screen density,如下所示:

// Get Metrics
var mainDisplayInfo = DeviceDisplay.MainDisplayInfo;
// Screen density
var density = mainDisplayInfo.Density;

如果iOS设备中的密度为3,像素为88,那么iOS中就有88/3个单位。

如果手机是 360dpi

也就是说它应该是Android设备,屏幕密度也可以通过360/160 = 2.25来计算。然后为HeightRequest设置88/2.25个单位。

==================================更新============== ================

如果Xaml中有BoxView如下:

<BoxView x:Name="MyBoxView" BackgroundColor="CadetBlue" HorizontalOptions="Fill"/>

以及效果:

现在我将打印MyBoxView.Width。结果是:

Console.WriteLine("++++MyBoxView++++" + MyBoxView.Width);

++++MyBoxView++++411.428571428571

如果您使用var density = mainDisplayInfo.Density; 获得密度,您将获得Screen Density::2.625。 (我的设备是Piexl_2_pie_9_0 api 28 模拟器)

你知道屏幕宽度的大小是1080像素,​​但是宽度是411.428571428571。这应该意味着WidthRequest 的单位。

如果你输入 411.428571428571 * 2.625 ,你会得到 1080 像素。

【讨论】:

  • 不,这不对。我的意思是,如果我有一个 Photoshop 设计并且其中的所有内容都是像素,那么如何从中获取单位?例如按钮是 88px 高度。如何在 xamarin 中设置 heightrequest?
  • @maui “如何从中获取单位”是什么意思?如果是pixel,就可以从中得到piexl。
  • @maui我已经更新了答案,有空可以看看。
  • 我的意思是如果boxView是88px那么我应该根据不同的设备设置它的widthRequest吗?在不同的设备android或ios中一个单元不一样?
  • 但据我所知,一英寸有 160 个单位。而一英寸有 72 个像素,对吗? 72dpi?所以这意味着 1units = 160 /72?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-11
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-12
  • 1970-01-01
  • 2012-03-11
相关资源
最近更新 更多