简答
Start、Center、End 和 Fill 定义视图的在其空间内的对齐方式。
Expand 定义是否占用更多空间(如果有)。
理论
LayoutOptions 结构控制两种不同的行为:
-
对齐方式: 视图在父视图中如何对齐?
-
Start:对于垂直对齐,视图被移动到顶部。对于水平对齐,这通常是左侧。 (但请注意,在具有从右到左语言设置的设备上,这是相反的,即右对齐。)
-
Center:视图居中。
-
End:通常视图是底部或右对齐。 (当然,在从右到左的语言中,左对齐。)
-
Fill:这种对齐方式略有不同。视图将延伸到父视图的整个大小。
但是,如果父级不大于其子级,您将不会注意到这些对齐方式之间的任何差异。对齐只对有额外可用空间的父视图很重要。
-
扩展: 如果可用,元素会占用更多空间吗?
- 后缀
Expand:如果父视图大于其所有子视图的组合大小,即有额外空间可用,则空间在具有该后缀的子视图之间按比例分配。那些孩子会“占据”他们的空间,但不一定会“填满”它。我们将在下面的示例中了解这种行为。
- 无后缀:没有
Expand 后缀的孩子不会获得额外的空间,即使有更多可用空间。
同样,如果父视图不大于其子视图,扩展后缀也没有任何区别。
示例
让我们看看下面的例子,看看所有八个布局选项之间的区别。
该应用程序包含一个深灰色的StackLayout,带有八个嵌套的白色按钮,每个按钮都标有其垂直布局选项。单击其中一个按钮时,它将其垂直布局选项分配给堆栈布局。这样我们可以很容易地测试视图与父视图的交互,两者都有不同的布局选项。
(最后几行代码添加了额外的黄色框。我们稍后再讨论。)
public static class App
{
static readonly StackLayout stackLayout = new StackLayout {
BackgroundColor = Color.Gray,
VerticalOptions = LayoutOptions.Start,
Spacing = 2,
Padding = 2,
};
public static Page GetMainPage()
{
AddButton("Start", LayoutOptions.Start);
AddButton("Center", LayoutOptions.Center);
AddButton("End", LayoutOptions.End);
AddButton("Fill", LayoutOptions.Fill);
AddButton("StartAndExpand", LayoutOptions.StartAndExpand);
AddButton("CenterAndExpand", LayoutOptions.CenterAndExpand);
AddButton("EndAndExpand", LayoutOptions.EndAndExpand);
AddButton("FillAndExpand", LayoutOptions.FillAndExpand);
return new NavigationPage(new ContentPage {
Content = stackLayout,
});
}
static void AddButton(string text, LayoutOptions verticalOptions)
{
stackLayout.Children.Add(new Button {
Text = text,
BackgroundColor = Color.White,
VerticalOptions = verticalOptions,
HeightRequest = 20,
Command = new Command(() => {
stackLayout.VerticalOptions = verticalOptions;
(stackLayout.ParentView as Page).Title = "StackLayout: " + text;
}),
});
stackLayout.Children.Add(new BoxView {
HeightRequest = 1,
Color = Color.Yellow,
});
}
}
以下屏幕截图显示了单击八个按钮中的每一个时的结果。我们做出以下观察:
- 只要父
stackLayout 紧(不Fill 页面),每个Button 的垂直布局选项可以忽略不计。
- 仅当
stackLayout 较大(例如通过Fill 对齐)并且各个按钮具有Expand 后缀时,垂直布局选项才有意义。
- 附加空间在所有带有
Expand 后缀的按钮中按比例分配。为了更清楚地看到这一点,我们在每两个相邻按钮之间添加了黄色水平线。
- 空间大于其请求高度的按钮不一定“填充”它。在这种情况下,实际行为由它们的对齐方式控制。例如。它们要么在其空间的顶部、中心或按钮上对齐,要么完全填满。
- 所有按钮跨越布局的整个宽度,因为我们只修改了
VerticalOptions。
Here you find the corresponding high-resolution screenshots.