简短回答
Start
, Center
, End
and Fill
定义视图的在其空间内对齐.
Expand
定义是否占用更多空间如果可供使用的话。
Theory
结构LayoutOptions
控制两种不同的行为:
-
结盟: 视图如何在父视图中对齐?
-
Start
:对于垂直对齐,视图移至顶部。对于水平对齐,这通常是左侧。 (但请注意,在具有从右到左语言设置的设备上,这是相反的方式,即右对齐。)
-
Center
:视图居中。
-
End
:通常视图是底部或右对齐的。 (当然,对于从右到左的语言,左对齐。)
-
Fill
:这种对齐方式略有不同。该视图将拉伸到父视图的整个尺寸。
但是,如果父级不大于其子级,您将不会注意到这些对齐方式之间有任何差异。对齐仅对具有额外可用空间的父视图很重要。
-
扩张: 如果可用,该元素会占用更多空间吗?
- Suffix
Expand
:如果父视图大于其所有子视图的总大小,即有额外的空间可用,则该空间将在具有该后缀的子视图之间按比例分配。这些孩子会“占据”他们的空间,但不一定“填满”它。我们将在下面的示例中看看这种行为。
- 无后缀:没有后缀的孩子
Expand
即使有更多可用空间,后缀也不会获得额外空间。
同样,如果父视图不大于其子视图,则扩展后缀也不会产生任何差异。
Example
让我们看一下下面的示例,看看所有八个布局选项之间的区别。
该应用程序包含深灰色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
suffix.
- 额外的空间在所有按钮之间均匀分布
Expand
后缀。为了更清楚地看到这一点,我们在每两个相邻按钮之间添加了黄色水平线。
- 空间大于其请求高度的按钮不一定会“填充”它。在这种情况下,实际行为由它们的对齐控制。例如。它们要么在其空间的顶部、中心或按钮上对齐,要么完全填充它。
- 所有按钮都跨越布局的整个宽度,因为我们只修改
VerticalOptions
.
在这里您可以找到相应的高分辨率屏幕截图。 https://docs.google.com/drawings/d/19400CzxB40toFhVxb8AXVHerr9_a6kEMM7kDDN0psQ8/edit?usp=sharing