Короткий ответ
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
.
Здесь вы найдете соответствующие скриншоты в высоком разрешении.