Metrical大小
现在您已经知道Xamarin.Forms应用程序中的大小与英寸和厘米的度量尺寸大致相对应,您可以调整元素的大小以使它们在各种设备上大小相同。 这里有一个名为MetricalBoxView的程序,它显示一个宽约1厘米,高约1英寸的BoxView:
public class MetricalBoxViewPage : ContentPage{ public MetricalBoxViewPage() { Content = new BoxView { Color = Color.Accent, WidthRequest = 64, HeightRequest = 160, HorizontalOptions = LayoutOptions.Center, VerticalOptions = LayoutOptions.Center }; }}如果你真的拿着尺子到手机屏幕上的物体上,你会发现它不是所需的尺寸,但确实接近它,因为这些屏幕截图还证实:
这个程序是打算在手机上运行。 如果您想在平板电脑上运行它,则可以使用Device.Idiom属性为iPad和Windows平板电脑设置较小的因子。
估计的字体大小
Label和Button上的FontSize属性指定从下边界到下边界顶部的字体字符的大致高度,通常(取决于字体)还包括变音符号。 在大多数情况下,您需要将此属性设置为由Device.GetNamedSize方法返回的值。 这允许您指定NamedSize枚举的成员:
默认,微型,小型,中型或大型。
或者,您可以将FontSize属性设置为实际的数字字体大小,但会涉及一些小问题(稍后将详细讨论)。 大多数情况下,您可以在整个Xamarin.Forms中使用的设备无关单元中指定字体大小,这意味着您可以根据平台分辨率计算独立于设备的字体大小。
例如,假设您想在程序中使用12点字体。 你应该知道的第一件事是,尽管12磅字体可能对于印刷材料或桌面屏幕来说是舒适的尺寸,但在手机上它相当大。 但让我们继续。
英寸有72点,所以12点字体是一英寸的六分之一。 DPI分辨率为160,这是大约27个独立于设备的单元。
我们来编写一个名为FontSizes的小程序,该程序以类似于第3章中的NamedFontSizes程序的显示开始,但随后显示一些带有数字点大小的文本,并使用设备分辨率转换为与设备无关的单元:
public class FontSizesPage : ContentPage{ public FontSizesPage() { BackgroundColor = Color.White; StackLayout stackLayout = new StackLayout { HorizontalOptions = LayoutOptions.Center, VerticalOptions = LayoutOptions.Center }; // Do the NamedSize values. NamedSize[] namedSizes = { NamedSize.Default, NamedSize.Micro, NamedSize.Small, NamedSize.Medium, NamedSize.Large }; foreach (NamedSize namedSize in namedSizes) { double fontSize = Device.GetNamedSize(namedSize, typeof(Label)); stackLayout.Children.Add(new Label { Text = String.Format("Named Size = {0} ({1:F2})", namedSize, fontSize), FontSize = fontSize, TextColor = Color.Black }); } // Resolution in device-independent units per inch. double resolution = 160; // Draw horizontal separator line. stackLayout.Children.Add( new BoxView { Color = Color.Accent, HeightRequest = resolution / 80 }); // Do some numeric point sizes. int[] ptSizes = { 4, 6, 8, 10, 12 }; foreach (double ptSize in ptSizes) { double fontSize = resolution * ptSize / 72; stackLayout.Children.Add(new Label { Text = String.Format("Point Size = {0} ({1:F2})", ptSize, fontSize), FontSize = fontSize, TextColor = Color.Black }); } Content = stackLayout; }}为了便于在三个屏幕之间进行比较,背景已统一设置为白色,标签为黑色。 注意BoxView插入到两个foreach块之间的StackLayout中:HeightRequest设置使其与设备无关的高度约为八十英寸,并且类似于水平线。
有趣的是,基于计算的结果视觉大小在平台之间比命名大小更一致。 括号中的数字是设备独立单元中的数字FontSize值:
继续阅读与本文标签相同的文章
-
每分钟进出车辆2.5台 智能立体车库解锁停车难
2026-05-19栏目: 教程
-
一文了解机器学习必学10大算法
2026-05-19栏目: 教程
-
开一家线上外卖门店选址要注意哪些因素?
2026-05-19栏目: 教程
-
信院人的APP,你get到了吗?
2026-05-19栏目: 教程
-
对话FILA姚伟雄:安踏赋予独立性,未来坚持做直营
2026-05-19栏目: 教程
