简短答案
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
。
在这里,您可以找到相应的高分辨率屏幕截图。