Shrnutí kapitoly 14. Absolutní rozložení

Download Sample Stažení ukázky

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 SizeChangedContentView 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 , LayoutFlagsPropertys 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:

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 XProportionalX 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 AbsoluteLayoutv 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.

Triple screenshot of dot matrix clock

Program BouncingText animuje dva Label objekty, které se posouvá vodorovně a svisle přes obrazovku.