Shrnutí kapitoly 14. Absolutní rozložení
Poznámka:
Tato kniha byla publikována na jaře roku 2016 a od té doby nebyla aktualizována. Existuje mnoho v knize, která zůstává cenná, ale některé materiály jsou zastaralé a některá témata už nejsou zcela správná nebo úplná.
Like StackLayout
, AbsoluteLayout
odvozuje a Layout<View>
dědí Children
vlastnost. AbsoluteLayout
implementuje systém rozložení, který vyžaduje programátora, aby určil pozice svých podřízených položek a volitelně i jejich velikost. Pozice je určena levým horním rohem podřízeného rohu vzhledem k levému hornímu AbsoluteLayout
rohu v jednotkách nezávislých na zařízení. AbsoluteLayout
implementuje také proporcionální funkci umístění a velikosti.
AbsoluteLayout
by měl být považován za systém rozložení pro zvláštní účely, který se má použít pouze tehdy, když programátor může na podřízené položky (například BoxView
prvky) nebo pokud velikost elementu nemá vliv na umístění ostatních podřízených položek. Vlastnosti HorizontalOptions
nemají žádný vliv na podřízené položky objektu AbsoluteLayout
.VerticalOptions
Tato kapitola také představuje důležitou funkci připojených vazebných vlastností, které umožňují připojení vlastností definovaných v jedné třídě (v tomto případěAbsoluteLayout
) k jiné třídě (podřízené ).AbsoluteLayout
AbsoluteLayout v kódu
Do kolekce pomocí standardní Add
metody můžete přidat podřízenou AbsoluteLayout
položkuChildren
, ale AbsoluteLayout
poskytuje také rozšířenou Add
metoduRectangle
, která umožňuje zadat . Jiná Add
metoda vyžaduje pouze Point
, v takovém případě dítě je unconstrained a velikost sám.
Můžete vytvořit Rectangle
hodnotu pomocí konstruktoru, který vyžaduje čtyři hodnoty – první dvě označující pozici levého horního rohu podřízeného rohu vzhledem k nadřazené ponětí a druhou dvě označující velikost dítěte. Nebo můžete použít konstruktor , který vyžaduje hodnotu Point
a Size
hodnotu.
Tyto Add
metody jsou demonstrovány v AbsoluteDemo, které umístí BoxView
prvky pomocí Rectangle
hodnot, a Label
prvek pomocí pouze Point
hodnoty.
Vzorek ChessboardFixed používá k vytvoření šachovnice 32 BoxView
prvků. Program dává BoxView
prvkům pevně zakódovanou velikost 35 jednotek čtverce. Má AbsoluteLayout
svůj HorizontalOptions
a VerticalOptions
nastavený LayoutOptions.Center
, což způsobí, že má celkovou AbsoluteLayout
velikost 280 jednotek čtverce.
Připojené vlastnosti s možností vazby
Je také možné nastavit pozici a volitelně velikost podřízeného AbsoluteLayout
objektu po jeho přidání do Children
kolekce pomocí statické metody AbsoluteLayout.SetLayoutBounds
. Prvním argumentem je podřízený argument; druhý je Rectangle
objekt. Podřízené velikosti můžete určit vodorovně nebo svisle nastavením hodnot šířky a výšky na konstantu AbsoluteLayout.AutoSize
.
ŠachovniceDynamická ukázka vloží AbsoluteLayout
do SizeChanged
ContentView
obslužné rutiny volání AbsoluteLayout.SetLayoutBounds
na všechny děti, aby je co největší.
Připojená bindable vlastnost, která definuje, AbsoluteLayout
je statické pole jen pro čtení typu BindableProperty
s názvem AbsoluteLayout.LayoutBoundsProperty
. Statická AbsoluteLayout.SetLayoutBounds
metoda je implementována voláním SetValue
podřízeného s AbsoluteLayout.LayoutBoundsProperty
. Podřízený obsahuje slovník, ve kterém je uložena připojená bindable vlastnost a její hodnota. Během rozložení AbsoluteLayout
lze tuto hodnotu získat voláním AbsoluteLayout.GetLayoutBounds
, která je implementována s voláním GetValue
.
Proporcionální určení velikosti a umístění
AbsoluteLayout
implementuje proporcionální funkci určení velikosti a umístění. Třída definuje druhou připojenou bindable vlastnost , LayoutFlagsProperty
s souvisejícími statickými metodami AbsoluteLayout.SetLayoutFlags
a AbsoluteLayout.GetLayoutFlags
.
Argument AbsoluteLayout.SetLayoutFlags
a návratová AbsoluteLayout.GetLayoutFlags
hodnota je hodnota typu AbsoluteLayoutFlags
, výčet s následujícími členy:
None
(rovná se 0)XProportional
(1)YProportional
(2)PositionProportional
(3)WidthProportional
(4)HeightProportional
(8)SizeProportional
(12)All
(\xFFFFFFFF)
Můžete je kombinovat s bitovým operátorem OR jazyka C#.
Při použití těchto příznaků jsou určité vlastnosti Rectangle
struktury hranic rozložení použité k umístění a velikosti podřízeného objektu interpretovány úměrně.
WidthProportional
Když je příznak nastaven, Width
hodnota 1 znamená, že podřízený je stejná šířka jako AbsoluteLayout
. Podobný přístup se používá pro výšku.
Proporcionální umístění bere v úvahu velikost. Při nastavení příznaku XProportional
X
je vlastnost Rectangle
hranice rozložení proporcionální. Hodnota 0 znamená, že levý okraj dítěte je umístěn na levém okraji AbsoluteLayout
, ale pozice 1 znamená, že pravý okraj dítěte je umístěn na pravém okraji AbsoluteLayout
, nikoli za pravý okraj pravého AbsoluteLayout
okraje, jak byste mohli očekávat. Vlastnost X
0,5 zarovná dítě vodorovně do AbsoluteLayout
.
Ukázka šachovniceProportional ukazuje použití proporcionální velikosti a umístění.
Práce s proporcionálními souřadnicemi
Někdy je jednodušší si představit proporcionální umístění odlišně, než jak je implementováno AbsoluteLayout
v systému . Můžete raději pracovat s proporcionálními souřadnicemi, kde X
vlastnost 1 umístí levý okraj dítěte (místo pravého okraje) proti pravému okraji AbsoluteLayout
.
Toto alternativní schéma umístění lze volat "zlomkové podřízené souřadnice". Z desetinných podřízených souřadnic můžete převést na hranice rozložení vyžadované pro AbsoluteLayout
použití následujících vzorců:
layoutBounds.X = (fractionalChildCoordinate.X / (1 – layoutBounds.Width))
layoutBounds.Y = (fractionalChildCoordinate.Y / (1 – layoutBounds.Height))
Ukázka ProporcionálníCoordinateCalc ukazuje tuto možnost.
AbsoluteLayout a XAML
Můžete použít v AbsoluteLayout
jazyce XAML a nastavit připojené bindable vlastnosti na podřízených objektech AbsoluteLayout
pomocí hodnot AbsoluteLayout.LayoutBounds
atributů a AbsoluteLayout.LayoutFlags
. To je ukázáno v vzorcích AbsoluteXamlDemo a ChessboardXaml. Druhý program obsahuje 32 BoxView
prvků, ale používá implicitní Style
, která zahrnuje AbsoluteLayout.LayoutFlags
vlastnost zachovat značky na minimum.
Atribut v jazyce XAML, který se skládá z názvu třídy, tečky a názvu vlastnosti je vždy připojena bindable vlastnost.
Překryvy
Můžete použít AbsoluteLayout
k vytvoření překrytí, které pokrývá stránku s jinými ovládacími prvky, třeba k ochraně uživatele před interakcí s normálními ovládacími prvky na stránce.
Ukázka SimpleOverlay ukazuje tuto techniku a také ukazuje ProgressBar
, který zobrazuje rozsah, ve kterém program dokončil úkol.
Zábava
Ukázka DotMatrixClock zobrazuje aktuální čas se simulovaným zobrazením matice s 5x7 tečkami. Každá tečka BoxView
je velikost (je jich 228) a umístěna na AbsoluteLayout
.
Program BouncingText animuje dva Label
objekty, které se posouvá vodorovně a svisle přes obrazovku.