短い答え
Start
、Center
、End
およびFill
ビューの定義その空間内での位置合わせを。
Expand
可能な場合、より多くのスペースを占有するかどうかを定義します。
理論
この構造LayoutOptions
は、2つの異なる動作を制御します。
配置: ビューは親ビュー内でどのように配置されますか?
Start
:垂直方向の配置では、ビューが上部に移動します。水平配置の場合、これは通常左側です。(ただし、右から左への言語設定を備えたデバイスでは、これは逆になります。つまり、右揃えになります。)
Center
:ビューが中央に配置されます。
End
:通常、ビューは下または右揃えです。(もちろん、右から左への言語では、左揃えになります。)
Fill
:この配置は少し異なります。ビューは、親ビューのフルサイズに拡大されます。
ただし、親が子よりも大きくない場合は、これらの配置の違いに気付くことはありません。配置は、追加のスペースが利用可能な親ビューに対してのみ重要です。
拡張: 可能な場合、要素はより多くのスペースを占有しますか?
- サフィックス
Expand
:親ビューがそのすべての子の合計サイズよりも大きい場合、つまり追加のスペースが利用可能な場合、スペースはその接尾辞を持つ子ビュー間で配分されます。それらの子供たちは自分のスペースを「占有」しますが、必ずしも「満たす」必要はありません。以下の例で、この動作を確認します。
- 接尾辞なし:
Expand
接尾辞のない子は、さらに多くのスペースが利用可能であっても、追加のスペースを取得しません。
この場合も、親ビューがその子よりも大きくない場合は、拡張サフィックスによっても違いはありません。
例
次の例を見て、8つのレイアウトオプションすべての違いを見てみましょう。
アプリにはダークグレーが含まれており、StackLayout
8つのネストされた白いボタンがあり、それぞれに垂直レイアウトオプションのラベルが付いています。ボタンの1つをクリックすると、垂直レイアウトオプションがスタックレイアウトに割り当てられます。このようにして、異なるレイアウトオプションを使用して、ビューと親の相互作用を簡単にテストできます。
(最後の数行のコードは、黄色のボックスを追加します。これについては、すぐに戻ってきます。)
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,
});
}
}
次のスクリーンショットは、8つのボタンのそれぞれをクリックしたときの結果を示しています。以下の観察を行います。
- 親
stackLayout
がタイト(Fill
ページではない)である限り、それぞれの垂直レイアウトオプションButton
は無視できます。
- 垂直方向のレイアウトオプション
stackLayout
は、が大きい場合(たとえば、Fill
配置を介して)、個々のボタンにExpand
サフィックスがある場合にのみ重要です。
- 追加のスペースは、最終的にすべてのボタンに
Expand
サフィックスが付いた比率になります。これをより明確に表示するために、隣接する2つのボタンの間に黄色の水平線を追加しました。
- 要求された高さよりも多くのスペースがあるボタンは、必ずしもそれを「埋める」とは限りません。この場合、実際の動作はそれらの配置によって制御されます。たとえば、スペースの上部、中央、またはボタンに配置するか、完全に埋めます。
- を変更するだけなので、すべてのボタンはレイアウトの幅全体に広がり
VerticalOptions
ます。
ここに、対応する高解像度のスクリーンショットがあります。