Xamarin.Forms AbsoluteLayout
AbsoluteLayoutSlouží k umístění a velikosti podřízených objektů pomocí explicitních hodnot. Pozice je určena v levém horním rohu podřízeného objektu vzhledem k levému hornímu rohu AbsoluteLayout v jednotkách nezávislých na zařízení. AbsoluteLayout také implementuje funkci proporcionálního umístění a velikosti. Kromě toho na rozdíl od některých jiných tříd rozložení AbsoluteLayout je schopen umístit podřízené objekty tak, aby se překrývaly.
AbsoluteLayoutMěla by být považována za speciální rozložení, které se má použít pouze v případě, že je možné nastavit velikost podřízených objektů nebo když velikost elementu neovlivní umístění jiných podřízených objektů.
AbsoluteLayoutTřída definuje následující vlastnosti:
LayoutBoundstypRectangle, který je připojenou vlastností, která představuje pozici a velikost podřízeného objektu. Výchozí hodnota této vlastnosti je (0, 0, AutoSize, AutoSize).LayoutFlagstypAbsoluteLayoutFlags, který je připojenou vlastností, která označuje, zda vlastnosti mezí rozložení použité pro umístění a velikost podřízeného objektu jsou interpretovány proporcionálně. Výchozí hodnota této vlastnosti jeAbsoluteLayoutFlags.None.
Tyto vlastnosti jsou zálohovány BindableProperty objekty, což znamená, že vlastnosti mohou být cílem datových vazeb a stylů. Další informace o připojených vlastnostech naleznete v tématu Xamarin.Forms Attached Properties .
AbsoluteLayoutTřída je odvozena z Layout<T> třídy, která definuje Children vlastnost typu IList<T> . ChildrenVlastnost je ContentPropertyLayout<T> třída, a proto nemusí být explicitně nastavena z XAML.
Tip
Abyste dosáhli nejlepšího možného výkonu rozložení, postupujte podle pokynů v části optimalizace výkonu rozložení.
Pozice a velikost podřízených objektů
Pozice a velikost podřízených prvků v AbsoluteLayout je definována nastavením AbsoluteLayout.LayoutBounds Vlastnosti připojené každého podřízeného objektu s použitím absolutních hodnot nebo proporcionálních hodnot. Absolutní a proporcionální hodnoty lze kombinovat pro podřízené objekty, pokud by měla být pozice škálovat, ale velikost by měla zůstat pevná nebo naopak. Informace o absolutních hodnotách naleznete v tématu absolutní umístění a velikost. Informace o proporcionálních hodnotách najdete v tématu proporcionální umístění a velikost.
AbsoluteLayout.LayoutBoundsPřipojená vlastnost může být nastavena pomocí dvou formátů bez ohledu na to, zda jsou použity absolutní nebo proporcionální hodnoty:
x, y. V tomto formátuxyhodnoty a označují pozici levého horního rohu podřízeného vzhledem k jeho nadřazenému objektu. Podřízená položka je neomezená a vlastní velikosti.x, y, width, height. V tomto formátuxyhodnoty a označují pozici levého horního rohu podřízeného objektu vzhledem k jeho nadřazenému prvku, zatímcowidthheighthodnoty a označují velikost dítěte.
Chcete-li určit, zda mají podřízené velikosti samy sebe vodorovně nebo svisle, nebo obě, nastavte width hodnoty a/nebo height na Xamarin_Forms width _AbsoluteLayout_AutoSize "data-LINKTYPE =" absolutní cesta ">AbsoluteLayout.AutoSize vlastnost. Vynechání této vlastnosti však může poškodit výkon aplikace, protože způsobí, že modul rozložení provede další výpočty rozložení.
Důležité
Xamarin_Forms _View_HorizontalOptions "data-LINKTYPE =" absolutní cestu ">HorizontalOptions a Xamarin_Forms HorizontalOptions _View_VerticalOptions data-linktype =" absolutní cesta ">VerticalOptions vlastnosti nemají žádný vliv na podřízené objekty AbsoluteLayout .
Absolutní umístění a velikost
Ve výchozím nastavení AbsoluteLayout pozice a velikosti podřízených objektů pomocí absolutních hodnot, které jsou zadány v jednotkách nezávislých na zařízení, které explicitně definují, kam mají být podřízené položky umístěny v rozložení. Toho je dosaženo přidáním podřízených objektů do Children kolekce AbsoluteLayout a nastavení AbsoluteLayout.LayoutBounds připojené vlastnosti u každého podřízeného na absolutní pozici nebo hodnoty velikosti.
Upozornění
Použití absolutních hodnot pro umístění a velikost podřízených objektů může být problematické, protože různá zařízení mají různé velikosti a rozlišení obrazovky. Proto mohou být souřadnice středu obrazovky na jednom zařízení posunuty na jiných zařízeních.
Následující kód XAML ukazuje, AbsoluteLayout jehož podřízené objekty jsou umístěny pomocí absolutních hodnot:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="AbsoluteLayoutDemos.Views.StylishHeaderDemoPage"
Title="Stylish header demo">
<AbsoluteLayout Margin="20">
<BoxView Color="Silver"
AbsoluteLayout.LayoutBounds="0, 10, 200, 5" />
<BoxView Color="Silver"
AbsoluteLayout.LayoutBounds="0, 20, 200, 5" />
<BoxView Color="Silver"
AbsoluteLayout.LayoutBounds="10, 0, 5, 65" />
<BoxView Color="Silver"
AbsoluteLayout.LayoutBounds="20, 0, 5, 65" />
<Label Text="Stylish Header"
FontSize="24"
AbsoluteLayout.LayoutBounds="30, 25" />
</AbsoluteLayout>
</ContentPage>
V tomto příkladu je pozice každého BoxView objektu definována pomocí prvních dvou absolutních hodnot, které jsou zadány v AbsoluteLayout.LayoutBounds připojené vlastnosti. Velikost každého BoxView je definována pomocí hodnot třetí a. Pozice Label objektu je definována pomocí dvou absolutních hodnot, které jsou zadány v AbsoluteLayout.LayoutBounds připojené vlastnosti. Hodnoty velikosti nejsou určeny pro Label , a proto jsou neomezené a velikosti samotné. Ve všech případech absolutní hodnoty označují jednotky nezávislé na zařízení.
Následující snímek obrazovky ukazuje výsledné rozložení:

Ekvivalentní kód C# je uveden níže:
public class StylishHeaderDemoPageCS : ContentPage
{
public StylishHeaderDemoPageCS()
{
AbsoluteLayout absoluteLayout = new AbsoluteLayout
{
Margin = new Thickness(20)
};
absoluteLayout.Children.Add(new BoxView
{
Color = Color.Silver,
}, new Rectangle(0, 10, 200, 5));
absoluteLayout.Children.Add(new BoxView
{
Color = Color.Silver
}, new Rectangle(0, 20, 200, 5));
absoluteLayout.Children.Add(new BoxView
{
Color = Color.Silver
}, new Rectangle(10, 0, 5, 65));
absoluteLayout.Children.Add(new BoxView
{
Color = Color.Silver
}, new Rectangle(20, 0, 5, 65));
absoluteLayout.Children.Add(new Label
{
Text = "Stylish Header",
FontSize = 24
}, new Point(30,25));
Title = "Stylish header demo";
Content = absoluteLayout;
}
}
V tomto příkladu je pozice a velikost každé z nich BoxView definována pomocí Rectangle objektu. Pozice Label je definována pomocí Point objektu.
V jazyce C# je také možné nastavit pozici a velikost podřízeného objektu AbsoluteLayout po jeho přidání do Children kolekce pomocí AbsoluteLayout.SetLayoutBounds metody. První argument této metody je podřízený a druhým je Rectangle objekt.
Poznámka
Objekt AbsoluteLayout , který používá absolutní hodnoty, může umístit a nastavit velikost podřízených, aby se nevešly do hranic rozvržení.
Proporcionální umístění a velikost
AbsoluteLayoutLze umístit a změnit velikost podřízených objektů pomocí proporcionálních hodnot. Toho je dosaženo přidáním podřízených objektů do Children kolekce a nastavením AbsoluteLayoutAbsoluteLayout.LayoutBounds Vlastnosti připojené u jednotlivých podřízených na proporcionální umístění nebo hodnoty velikosti v rozsahu 0-1. Pozice a velikost hodnot jsou úměrné nastavením AbsoluteLayout.LayoutFlags připojené vlastnosti u každého podřízeného objektu.
AbsoluteLayout.LayoutFlagsPřipojená vlastnost typu AbsoluteLayoutFlags umožňuje nastavit příznak, který označuje, že hodnoty pozice a velikosti pro podřízenou položku jsou úměrné velikosti AbsoluteLayout . Při rozkladu podřízeného objektu se AbsoluteLayout škálují odpovídající hodnoty velikosti a velikosti podle velikosti zařízení.
AbsoluteLayoutFlagsVýčet definuje následující členy:
None, označuje, že hodnoty budou interpretovány jako absolutní. Toto je výchozí hodnotaAbsoluteLayout.LayoutFlagspřipojené vlastnosti.XProportionaloznačuje, žexhodnota bude interpretována jako proporční a zároveň zpracuje všechny ostatní hodnoty jako absolutní.YProportionaloznačuje, žeyhodnota bude interpretována jako proporční a zároveň zpracuje všechny ostatní hodnoty jako absolutní.WidthProportionaloznačuje, žewidthhodnota bude interpretována jako proporční a zároveň zpracuje všechny ostatní hodnoty jako absolutní.HeightProportionaloznačuje, žeheighthodnota bude interpretována jako proporční a zároveň zpracuje všechny ostatní hodnoty jako absolutní.PositionProportional, označuje, žexyhodnoty a budou interpretovány jako proporční, zatímco hodnoty velikosti jsou interpretovány jako absolutní.SizeProportional, označuje, žewidthheighthodnoty a budou interpretovány jako proporční, zatímco hodnoty pozice jsou interpretovány jako absolutní.All, označuje, že všechny hodnoty budou interpretovány jako proporční.
Tip
AbsoluteLayoutFlagsVýčet je Flags výčet, což znamená, že členy výčtu mohou být kombinovány. To se provádí v jazyce XAML se seznamem odděleným čárkami a v jazyce C# s bitovým operátorem OR.
Pokud například použijete SizeProportional příznak a nastavíte šířku podřízeného prvku na 0,25 a výšku na 0,1, bude podřízená položka jedna čtvrtina šířky AbsoluteLayout a jedna desetinná výška. PositionProportionalPříznak je podobný. Pozice (0, 0) vloží podřízenou položku v levém horním rohu, zatímco pozice (1, 1) umístí podřízenou položku do pravého dolního rohu a pozice (0,5, 0,5) nacentruje podřízený objekt v rámci AbsoluteLayout .
Následující kód XAML ukazuje, AbsoluteLayout jehož podřízené objekty jsou umístěny pomocí proporcionálních hodnot:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="AbsoluteLayoutDemos.Views.ProportionalDemoPage"
Title="Proportional demo">
<AbsoluteLayout>
<BoxView Color="Blue"
AbsoluteLayout.LayoutBounds="0.5,0,100,25"
AbsoluteLayout.LayoutFlags="PositionProportional" />
<BoxView Color="Green"
AbsoluteLayout.LayoutBounds="0,0.5,25,100"
AbsoluteLayout.LayoutFlags="PositionProportional" />
<BoxView Color="Red"
AbsoluteLayout.LayoutBounds="1,0.5,25,100"
AbsoluteLayout.LayoutFlags="PositionProportional" />
<BoxView Color="Black"
AbsoluteLayout.LayoutBounds="0.5,1,100,25"
AbsoluteLayout.LayoutFlags="PositionProportional" />
<Label Text="Centered text"
AbsoluteLayout.LayoutBounds="0.5,0.5,110,25"
AbsoluteLayout.LayoutFlags="PositionProportional" />
</AbsoluteLayout>
</ContentPage>
V tomto příkladu je každá podřízená položka umístěná pomocí proporcionálních hodnot, ale velikost pomocí absolutních hodnot. Toho je možné dosáhnout nastavením AbsoluteLayout.LayoutFlags Vlastnosti připojené každého podřízené na PositionProportional . První dvě hodnoty, které jsou zadány v AbsoluteLayout.LayoutBounds připojené vlastnosti pro každou podřízenou položku, definují pozici pomocí proporcionálních hodnot. Velikost každého podřízeného objektu je definována s použitím jednotek nezávislých na zařízení a absolutních hodnot.
Následující snímek obrazovky ukazuje výsledné rozložení:

Ekvivalentní kód C# je uveden níže:
public class ProportionalDemoPageCS : ContentPage
{
public ProportionalDemoPageCS()
{
BoxView blue = new BoxView { Color = Color.Blue };
AbsoluteLayout.SetLayoutBounds(blue, new Rectangle(0.5, 0, 100, 25));
AbsoluteLayout.SetLayoutFlags(blue, AbsoluteLayoutFlags.PositionProportional);
BoxView green = new BoxView { Color = Color.Green };
AbsoluteLayout.SetLayoutBounds(green, new Rectangle(0, 0.5, 25, 100));
AbsoluteLayout.SetLayoutFlags(green, AbsoluteLayoutFlags.PositionProportional);
BoxView red = new BoxView { Color = Color.Red };
AbsoluteLayout.SetLayoutBounds(red, new Rectangle(1, 0.5, 25, 100));
AbsoluteLayout.SetLayoutFlags(red, AbsoluteLayoutFlags.PositionProportional);
BoxView black = new BoxView { Color = Color.Black };
AbsoluteLayout.SetLayoutBounds(black, new Rectangle(0.5, 1, 100, 25));
AbsoluteLayout.SetLayoutFlags(black, AbsoluteLayoutFlags.PositionProportional);
Label label = new Label { Text = "Centered text" };
AbsoluteLayout.SetLayoutBounds(label, new Rectangle(0.5, 0.5, 110, 25));
AbsoluteLayout.SetLayoutFlags(label, AbsoluteLayoutFlags.PositionProportional);
Title = "Proportional demo";
Content = new AbsoluteLayout
{
Children = { blue, green, red, black, label }
};
}
}
V tomto příkladu je pozice a velikost jednotlivých podřízených objektů nastaveny pomocí AbsoluteLayout.SetLayoutBounds metody. První argument metody je podřízený a druhým je Rectangle objekt. Pozice jednotlivých podřízených objektů je nastavena s použitím proporcionálních hodnot, zatímco velikost jednotlivých podřízených objektů je nastavena s použitím absolutních hodnot pomocí jednotek nezávislých na zařízení.
Poznámka
Objekt AbsoluteLayout , který používá proporcionální hodnoty, může umístit a nastavit velikost podřízených prvků tak, aby se nevešly do hranic rozložení pomocí hodnot mimo rozsah 0-1.
Stažení ukázky
Xamarin. Forms