Shrnutí kapitoly 5. Řešení velikostí
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á.
Dosud bylo dosaženo několika velikostí Xamarin.Forms :
- Výška stavového řádku pro iOS je 20
- Výchozí
BoxView
šířka a výška 40 - Výchozí hodnota
Padding
v hodnotěFrame
20 - Výchozí hodnota
Spacing
StackLayout
je 6. - Metoda
Device.GetNamedSize
vrátí číselnou velikost písma.
Tyto velikosti nejsou pixely. Místo toho jsou jednotky nezávislé na zařízení rozpoznané nezávisle na každé platformě.
Pixely, body, dps, DIPS a DIU
V rané fázi historie Apple Mac a Microsoft Windows programátoři pracovali v jednotkách pixelů. Nástup vyššího rozlišení ale vyžaduje virtualizovaný a abstraktní přístup ke souřadnicům obrazovky. Na světě Mac programátoři pracovali v jednotkách bodů, tradičně 1/72 palce, zatímco vývojáři Windows používali jednotky nezávislé na zařízeních (DIU) založené na 1/96 palců.
Mobilní zařízení jsou ale obecně mnohem blíže k obličeji a mají vyšší rozlišení než obrazovky plochy, což znamená, že větší hustota pixelů může být tolerována.
Programátoři, kteří cílí na zařízení Apple iPhone a iPad, nadále pracují v jednotkách bodů, ale na 160 z těchto bodů je 160 palců. V závislosti na zařízení může být k bodu 1, 2 nebo 3 pixely.
Android je podobný. Programátoři pracují v jednotkách pixelů nezávislých na hustotě (dps) a vztah mezi dps a pixely je založen na 160 dps na paleci.
Telefony a mobilní zařízení s Windows také navazovaly faktory škálování, které naznačují, že se blíží 160 jednotek nezávislých na zařízeních.
Poznámka:
Xamarin.Forms už nepodporuje žádný telefon nebo mobilní zařízení s Windows.
V souhrnu Xamarin.Forms programátor, který cílí na telefony a tablety, může předpokládat, že všechny měrné jednotky jsou založeny na následujícím kritériu:
- 160 jednotek na palce, odpovídající
- 64 jednotek na centimetr
Vlastnosti jen pro Width
čtení a Height
vlastnosti definované ve výchozím nastavení mají hodnotu "napodobení VisualElement
" –1. Tyto vlastnosti budou odrážet skutečnou velikost prvku v jednotkách nezávislých na zařízení, pouze pokud má prvek velikost a je v rozložení. Tato velikost zahrnuje jakoukoli Padding
sadu prvku, ale ne Margin
.
Vizuální prvek aktivuje SizeChanged
událost, když se změní Width
Height
. Ukázka WhatSize používá tuto událost k zobrazení velikosti obrazovky programu.
Velikosti metrik
MetricalBoxView používá WidthRequest
a HeightRequest
k zobrazení BoxView
jednoho palce vysoký a jeden centimetr široký.
Odhadované velikosti písem
Ukázka FontSizes ukazuje, jak použít pravidlo 160 jednotek-to-the-inch k určení velikostí písem v jednotkách bodů. Vizuální konzistence mezi platformami používajícími tuto techniku je lepší než Device.GetNamedSize
.
Přizpůsobení textu k dostupné velikosti
Blok textu je možné přizpůsobit do určitého obdélníku tak, že vypočítáte některou FontSize
z Label
následujících kritérií:
- Řádkování je 120 % velikosti písma (130 % na platformách Windows).
- Průměrná šířka písma je 50 % velikosti písma.
Ukázka EstimatedFontSize ukazuje tuto techniku. Tento program byl napsán před dostupností Margin
vlastnosti, takže k simulaci okraje používá ContentView
nastavení s Padding
nastavením.
Hodina přizpůsobit velikosti
Ukázka FitToSizeClock ukazuje použití Device.StartTimer
k spuštění časovače, který pravidelně upozorní aplikaci, když je čas aktualizovat hodiny. Velikost písma je nastavená na jednu šestou šířku stránky, aby bylo zobrazení co největší.
Problémy s přístupností
Program EstimatedFontSize a program FitToSizeClock obsahují drobné nedostatky: Pokud uživatel změní nastavení přístupnosti telefonu v Androidu nebo Windows 10 Mobile, program už nedokáže odhadnout, jak velký text se vykresluje na základě velikosti písma. Tento problém ukazuje ukázka AccessibilityTest.
Empirické přizpůsobení textu
Dalším způsobem, jak přizpůsobit text obdélníku, je empiricky vypočítat vykreslenou velikost textu a upravit ho nahoru nebo dolů. Program v knize volá GetSizeRequest
vizuální prvek k získání požadované velikosti elementu. Tato metoda je zastaralá a programy by měly místo toho volat Measure
.
Label
První argument by měl být šířkou kontejneru (pro povolení obtékání), zatímco druhý argument by měl být nastaven tak, aby Double.PositiveInfinity
byl výška nepřekonkutovaná. Tento postup demonstruje ukázka EmpirickýFontSize.