如何在 Xamarin 表单中将边距、填充、宽度和高度值转换为像素(px)?

Posted

技术标签:

【中文标题】如何在 Xamarin 表单中将边距、填充、宽度和高度值转换为像素(px)?【英文标题】:How to convert the margin, padding, width and height values to pixel(px) in Xamarin forms? 【发布时间】:2020-12-23 21:55:42 【问题描述】:

Xamarin 表单 控件具有 ma​​rginpaddingwidth 和 height 属性,如何将此属性值转换为像素。

已经获得了一些将 db 转换为 px 的参考链接,但默认的 xamarin 格式是 px 还是 db 是个疑问?

public float convertDpToPx(Context context, float dp) 

  return dp * context.getResources().getDisplayMetrics().density; 

Converting pixels to dp

在 xamarin(uwp、androidios) 中是否可以将宽度和高度值转换为像素?

提前致谢。

【问题讨论】:

查看docs.microsoft.com/en-us/xamarin/xamarin-forms/… 您的问题似乎与此相同:***.com/questions/63612367/… @deirahi,谢谢,我浏览了那个链接,需要一些澄清,我是 android 的初学者,请解释一下为什么我们需要将 db 转换为 px? 我也没有那么多经验。所以,我不知道为什么,但我猜一些 API 和库需要像素。 【参考方案1】:

dp是Density-Independent-Pixels,dp在Android开发中常用来适配手机。谷歌规定,当 1 英寸屏幕上有 160 像素(px)时,则 1dp=1px=1dpi。

android dp的目的是自适应手机不同尺寸和分辨率,一个dp值可以让Android系统自动选择匹配的资源。也就是说dp值可以根据设备需求,通过一定的方式获取相应的图片资源或大小。

xamarin 提供了Xamarin.Essentials 用于获取当前显示器的密度。并且你可以使用dp和px的关系从px获取dp。(xamrin宽高的默认单位是px)

public static int px2dip(DisplayInfo mainDisplayInfo, float pxValue)

    float scale = (float)mainDisplayInfo.Density;
    return (int)(pxValue / scale + 0.5f);


var dp = px2dip(DeviceDisplay.MainDisplayInfo, pxvalue);

【讨论】:

以上是关于如何在 Xamarin 表单中将边距、填充、宽度和高度值转换为像素(px)?的主要内容,如果未能解决你的问题,请参考以下文章

100% 宽度减去边距和填充 [重复]

如何根据自己的宽度而不是父 div 将 CSS 边距/填充设置为子 div?

如何在 Xamarin 表单中将数组绑定到 ListView

具有填充和边距以及 100% 宽度的 HTML CSS 框? [复制]

如何在 uitableviewcell 中将边距设置为零?

如何设置按钮的内部文本边距