AbsoluteLayout
AbsoluteLayout
定位和調整與其自身大小和位置成比例的子元素或絕對值。可以使用比例值或靜態值來定位和調整子檢視,並且可以混合比例和靜態值。
XAML 中 AbsoluteLayout
的定義如下所示:
<AbsoluteLayout>
<Label Text="I'm centered on iPhone 4 but no other device"
AbsoluteLayout.LayoutBounds="115,150,100,100" LineBreakMode="WordWrap" />
<Label Text="I'm bottom center on every device."
AbsoluteLayout.LayoutBounds=".5,1,.5,.1" AbsoluteLayout.LayoutFlags="All"
LineBreakMode="WordWrap" />
<BoxView Color="Olive" AbsoluteLayout.LayoutBounds="1,.5, 25, 100"
AbsoluteLayout.LayoutFlags="PositionProportional" />
<BoxView Color="Red" AbsoluteLayout.LayoutBounds="0,.5,25,100"
AbsoluteLayout.LayoutFlags="PositionProportional" />
<BoxView Color="Blue" AbsoluteLayout.LayoutBounds=".5,0,100,25"
AbsoluteLayout.LayoutFlags="PositionProportional" />
<BoxView Color="Blue" AbsoluteLayout.LayoutBounds=".5,0,1,25"
AbsoluteLayout.LayoutFlags="PositionProportional, WidthProportional" />
</AbsoluteLayout>
程式碼中的相同佈局如下所示:
Title = "Absolute Layout Exploration - Code";
var layout = new AbsoluteLayout();
var centerLabel = new Label {
Text = "I'm centered on iPhone 4 but no other device.",
LineBreakMode = LineBreakMode.WordWrap};
AbsoluteLayout.SetLayoutBounds (centerLabel, new Rectangle (115, 159, 100, 100));
// No need to set layout flags, absolute positioning is the default
var bottomLabel = new Label { Text = "I'm bottom center on every device.", LineBreakMode = LineBreakMode.WordWrap };
AbsoluteLayout.SetLayoutBounds (bottomLabel, new Rectangle (.5, 1, .5, .1));
AbsoluteLayout.SetLayoutFlags (bottomLabel, AbsoluteLayoutFlags.All);
var rightBox = new BoxView{ Color = Color.Olive };
AbsoluteLayout.SetLayoutBounds (rightBox, new Rectangle (1, .5, 25, 100));
AbsoluteLayout.SetLayoutFlags (rightBox, AbsoluteLayoutFlags.PositionProportional);
var leftBox = new BoxView{ Color = Color.Red };
AbsoluteLayout.SetLayoutBounds (leftBox, new Rectangle (0, .5, 25, 100));
AbsoluteLayout.SetLayoutFlags (leftBox, AbsoluteLayoutFlags.PositionProportional);
var topBox = new BoxView{ Color = Color.Blue };
AbsoluteLayout.SetLayoutBounds (topBox, new Rectangle (.5, 0, 100, 25));
AbsoluteLayout.SetLayoutFlags (topBox, AbsoluteLayoutFlags.PositionProportional);
var twoFlagsBox = new BoxView{ Color = Color.Blue };
AbsoluteLayout.SetLayoutBounds (topBox, new Rectangle (.5, 0, 1, 25));
AbsoluteLayout.SetLayoutFlags (topBox, AbsoluteLayoutFlags.PositionProportional | AbsoluteLayout.WidthProportional);
layout.Children.Add (bottomLabel);
layout.Children.Add (centerLabel);
layout.Children.Add (rightBox);
layout.Children.Add (leftBox);
layout.Children.Add (topBox);
Xamarin.Forms 中的 AbsoluteLayout 控制元件允許你指定螢幕上你希望子元素出現的確切位置,以及它們的大小和形狀(邊界)。
根據此過程中使用的 AbsoluteLayoutFlags 列舉,有幾種不同的方法可以設定子元素的邊界。該 AbsoluteLayoutFlags 列舉包含以下值:
- 全部 :所有尺寸都是成比例的。
- HeightProportional :身高成正比的佈局。
- 無 :沒有解釋。
- PositionProportional :結合 XProportional 和 YProportional。
- SizeProportional :結合 WidthProportional 和 HeightProportional。
- WidthProportional :寬度與佈局成比例。
- XProportional :X 屬性與佈局成比例。
- YProportional :Y 屬性與佈局成比例。
使用 AbsoluteLayout 容器的佈局的過程起初可能看起來有點違反直覺,但稍微使用它會變得熟悉。建立子元素後,要將它們設定在容器中的絕對位置,你需要執行三個步驟。你將需要使用 AbsoluteLayout.SetLayoutFlags()
方法設定分配給元素的標誌。你還需要使用 AbsoluteLayout.SetLayoutBounds()
給元素賦予邊界的方法。最後,你需要將子元素新增到 Children 集合中。由於 Xamarin.Forms 是 Xamarin 和特定於裝置的實現之間的抽象層,因此位置值可以獨立於裝置畫素。這是前面提到的佈局標誌發揮作用的地方。你可以選擇 Xamarin.Forms 控制元件的佈局過程如何解釋你定義的值。