xamarin.forms - 如何将像素转换为 xamarin.forms 单位?
问题描述
- 每英寸有 160 个单位。2.如果我创建了一个72 dpi的Photoshop文件,那么每英寸将有 72 个点。3.如果元素是Photoshop中的高度,那么我必须在其中设置什么?
88px
xamarin
如果手机是 360dpi,那么 xamarin 中的高度应该是:88 / 72 * 160 / 2
?但这是不对的。
解决方案
我知道每个平台中的单位,我只想知道如何从像素中获取单位
您可以使用Xamarin.Essentials获得Screen density
如下信息:
// Get Metrics
var mainDisplayInfo = DeviceDisplay.MainDisplayInfo;
// Screen density
var density = mainDisplayInfo.Density;
如果密度是3
iOS 设备,像素是88
,那么 iOS 中有88/3
单位。
如果手机是 360dpi
这意味着它应该是Android设备,屏幕密度也可以通过计算360/160 = 2.25
。然后有 88/2.25 个单位要设置HeightRequest
。
=================================更新================= ==============
如果XamlBoxView
中有一个如下:
<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
像素。
推荐阅读
- graphics - three.js 中的帧率下降/效率问题
- mysql - 无法使用 .NET mysql 连接器连接到 mysql rds 实例
- bash - 无法访问函数内的变量
- jquery - 如何使用 div 作为下拉菜单
- javascript - 使用 Jest 和 Enzyme 进行测试:如何导航 React Router DOM
- swift - Swift 标签无法正确拟合文本
- python - 如何在python中按条件组合列表
- c# - C# - 读取、拆分和扩展 CSV 文件
- php - php jquery onclick 提交重定向到另一个页面
- ansible - 在 playbook 中使用 shell 模块时出现 Ansible MemoryError