Xamarin.Forms 布局

2025年03月17日 | 阅读 9 分钟

Xamarin.Forms 布局类允许我们排列和分组 UI 控件。要选择布局类,需要了解如何排列子元素的位置和大小。

堆栈布局

堆栈布局在水平或垂直的一维堆栈中组织元素。方向属性确定元素的排列方向,默认方向为垂直。堆栈布局通常用于在页面上排列 UI 的子部分。

以下 XAML 显示了如何创建一个包含三个标签对象的垂直 StackLayout。

MainPage.XAML


输出

Xamarin.Forms Layout

网格布局

Stack Layout 通常用作父布局,其中包含其他子布局。但是,不应使用 StackLayout 通过使用 Stack Layout 对象的组合来复制 Grid 布局。

不使用 Grid

输出

Xamarin.Forms Layout

这种类型的布局是浪费的,因为它执行了不必要的布局计算。我们可以使用 Grid 获得更好的所需布局。

网格布局

Grid 用于以行和列的形式显示元素,这些元素可以具有比例或绝对大小。网格的行和列使用 RowDefinitions 和 ColoumnDefinitions 属性指定。对于特定网格单元格中元素的位置,使用 Grid. Column Grid. Row 附加属性。要使元素跨越多行和多列,请使用 Grid.RowSpan Grid.ColumnSpan 附加属性。

Grid 支持将视图排列成行和列。可以将行和列设置为比例大小或全尺寸。Grid 布局不应与传统表格混淆,并且不用于呈现表格数据。网格没有行、列或单元格格式化的概念。与 HTML 表格不同,Grid 纯粹用于布置内容。

在 Grid 布局中,我们可以将屏幕分成行和列,使我们的布局更具吸引力。Grid 布局主要用于照片库和其他使用网格的地方。

网格看起来像这样

Xamarin.Forms Layout

目的

网格可用于将视图排列到网格中。这在很多情况下都很有用

  • 它用于排列计算器应用程序中的按钮。
  • 像 iOS 或 Android 主屏幕一样,在网格中排列按钮/选择项。
  • 它用于排列视图,使它们在一个维度上相等(例如工具栏)。

用途

与传统表格不同,Grid 不会干扰内容的行和列的数量。相反,Grid 具有 RowDefinitions 和 ColumnDefinition 集合。这些保存了多少行和列将被布置的定义。视图被添加到带有指定行和列索引的 Grid 中,这些索引标识了视图应该放置在哪个列中。

行和列

行和列信息分别存储在 Grid 的 RowDefinitionColumnDefinitions 属性中,其中每个集合都是 RowDefinition 和 ColumnDefinition 对象。 RowDefinition 只有一个属性

制作网格布局时要记住的步骤

  • 定义总行数
  • 定义总列数
  • 定义我们要放置在布局中的所有元素,并设置元素所需的行和列。

MainPage.XAML


输出

Xamarin.Forms Layout

Flex 布局

FlexLayout 类似于 StackLayout,因为它在水平或垂直堆栈中显示子元素。但是,如果子元素过多而无法容纳在单个行或列中,FlexLayout 也可以包装其子元素,并且还可以实现对其子元素的大小、方向和对齐方式的更精细的控制。

这里是 XAML,它显示了如何创建 FlexLayout,该布局在其单个列中显示其单个视图。

MainPage.XAML

输出

Xamarin.Forms Layout

绝对布局

绝对布局用于将子元素放置在绝对请求位置。当我们希望摆脱所有布局限制并使布局与众不同时,使用绝对布局。我们可以使用比例值和绝对值来设置元素的高度、宽度、X 轴和 Y 轴。

示例

在这里,我们将采用绝对布局的实际实现。在这里,我们将制作盒子并将它们放置在我们想要的任何地方,方法是设置它们的 x 轴和 y 轴。

在这里,我们将制作盒子并将其设置在我们的背景页面上。这里需要牢记几件事。

在绝对边界中,我们始终设置布局边界和布局标志。

布局边界

在布局边界中,我们将以 X 轴、Y 轴、宽度、高度的顺序设置宽度、高度、x 轴和 y 轴的值。我们在布局边界中设置的第一个值将成为 x 轴的值,依此类推。

布局标志

在布局标志中,我们将声明绑定布局中的值是否成比例。最小的比例值是 0,最大值是 1。

MainPage.XAML

代码解释

在这里,我们了解了布局边界和布局标志。如上代码所示,我们将宽度和高度设置为最大值,并在布局标志中声明这些值是成比例的。在这里,盒子覆盖了整个盒子,充当了我们应用程序的背景。

输出

Xamarin.Forms Layout

在这里,我们看到它工作得很好。在这里,我们制作一个盒子并将其设置为我们应用程序的背景。现在我们将制作另一个盒子,并将它放在我们页面的中心。

代码解释

我们已经有一个盒子了,现在我们想添加另一个盒子,其中 X 轴和 Y 轴的比例值设置为 0.5,这意味着 50%,并且我们的新盒子位于页面的中心。我们可以更改 x 和 y 轴的值以查看盒子的移动。

输出

Xamarin.Forms Layout

在这里,我们看到了在页面中心创建的另一个盒子。

现在我们将创建一个标签,并将其放置在页面的底部。

代码解释

在这里,在标签中,我们为其高度设置了绝对值,并为 x 轴和宽度设置了比例值。 Y 轴设置为 1,以便它显示在页面底部。

输出

Xamarin.Forms Layout

相对布局

目的

相对布局可用于根据整体布局或其他视图在屏幕上定位视图。

用途

理解概念

在 RelativeLayout 中定位和调整视图的大小是通过约束完成的。约束信息可能包含以下信息。

类型

约束与父级或其他视图相关。

属性

我们应该使用哪个属性作为约束的基础。

因素

我们必须对属性值应用哪个因子。

Constant

我们必须使用哪个值作为成本的偏移量。

元素名称

约束所涉及的视图的名称。

输出

Xamarin.Forms Layout

在这里,我们将探索复杂的布局

每个布局都有其创建特定布局的优点和缺点。在这里,我们将使用三种不同的布局创建一个带有相同页面实现的示例应用程序。

MainPage.XAML


输出

Xamarin.Forms Layout

滚动视图

滚动视图包含布局并使其能够滚出屏幕。当键盘显示时,滚动视图还用于允许视图移动到屏幕的可见部分。

目的

ScrollView 确保在小手机上可以很好地显示更大的视图。

例如

通常来说,在 iPhone 6s 上运行的布局可以在 iPhone 4s 上共享。 Scrollview 允许在较小的屏幕上显示布局的剪切部分。

MainPage.XAML

输出

Xamarin.Forms Layout

总结

一般来说,我们发现 Xamarin 的布局结构与其他 XAML 框架相似。它们旨在在跨平台情况下工作。每个布局都解决了特定的问题。一旦我们了解了每个布局的工作方式,我们就可以将它们分层在一起以构建我们梦想的 UI。