Xamarin.Forms Vlastní vykreslovací moduly prostředí
Jednou z výhod Xamarin.Forms aplikací shellu je, že jejich vzhled a chování je vysoce přizpůsobitelné prostřednictvím vlastností a metod, které různé třídy Shell zpřístupňují. Je ale také možné vytvořit vlastní vykreslovací modul prostředí, pokud jsou vyžadována rozsáhlejší přizpůsobení specifická pro platformu. Stejně jako u jiných vlastních rendererů je možné do jednoho projektu platformy přidat vlastní renderer shellu, který přizpůsobí vzhled a chování a zároveň povolí výchozí chování na druhé platformě; nebo do každého projektu platformy je možné přidat jiný vlastní renderer shellu, který přizpůsobí vzhled a chování v iOSu i Androidu.
Shellové aplikace se vykreslují pomocí třídy v iOSu ShellRenderer
a Androidu. V iOSu ShellRenderer
Xamarin.Forms.Platform.iOS
lze třídu najít v oboru názvů. V Androidu ShellRenderer
lze třídu najít v Xamarin.Forms.Platform.Android
oboru názvů.
Proces vytvoření vlastního rendereru prostředí je následující:
- Podtřídy
Shell
třídy. To už bude provedeno ve vaší aplikaci Shell. - Spotřebujte podtřídu
Shell
třídy. To už bude provedeno ve vaší aplikaci Shell. - Vytvořte vlastní třídu rendereru, která je odvozena z
ShellRenderer
třídy, na požadovaných platformách.
Vytvoření vlastní třídy rendereru
Proces vytvoření vlastní třídy rendereru prostředí je následující:
- Vytvořte podtřídu
ShellRenderer
třídy. - Přepište požadované metody pro provedení požadovaného přizpůsobení.
- Přidejte do
ShellRenderer
podtřídy aExportRendererAttribute
určete, že se použije k vykreslení aplikace Shell. Tento atribut se používá k registraci vlastního rendereru v Xamarin.Forms.
Poznámka:
V každém projektu platformy je volitelné zadat vlastní renderer prostředí. Pokud není zaregistrovaný vlastní renderer, použije se výchozí ShellRenderer
třída.
Třída ShellRenderer
zveřejňuje následující přepisovatelné metody:
iOS | Android | UWP |
---|---|---|
SetElementSize CreateFlyoutRenderer CreateNavBarAppearanceTracker CreatePageRendererTracker CreateShellFlyoutContentRenderer CreateShellItemRenderer CreateShellItemTransition CreateShellSearchResultsRenderer CreateShellSectionRenderer CreateTabBarAppearanceTracker Dispose OnCurrentItemChanged OnElementPropertyChanged OnElementSet UpdateBackgroundColor |
CreateFragmentForPage CreateShellFlyoutContentRenderer CreateShellFlyoutRenderer CreateShellItemRenderer CreateShellSectionRenderer CreateTrackerForToolbar CreateToolbarAppearanceTracker CreateTabLayoutAppearanceTracker CreateBottomNavViewAppearanceTracker OnElementPropertyChanged OnElementSet SwitchFragment Dispose |
CreateShellFlyoutTemplateSelector CreateShellHeaderRenderer CreateShellItemRenderer CreateShellSectionRenderer OnElementPropertyChanged OnElementSet UpdateFlyoutBackdropColor UpdateFlyoutBackgroundColor |
Třídy FlyoutItem
jsou aliasy pro ShellItem
třídu a Tab
třída je alias třídyShellSection
.TabBar
CreateShellItemRenderer
Proto by metoda měla být přepsána při vytváření vlastní renderer pro FlyoutItem
objekty a CreateShellSectionRenderer
metoda by měla být přepsána při vytváření vlastní renderer pro Tab
objekty.
Důležité
V systémech iOS, Android a UPW existují další třídy vykreslovacího modulu shellu, například ShellSectionRenderer
ShellItemRenderer
a . Tyto další třídy rendereru jsou však vytvořeny přepsáním ve ShellRenderer
třídě. Proto přizpůsobení chování těchto dalších tříd rendereru lze dosáhnout jejich podtřídy a vytvoření instance podtřídy v příslušné přepsání v podtřídě ShellRenderer
třídy.
Příklad iOSu
Následující příklad kódu ukazuje podtřídu ShellRenderer
, pro iOS, který nastaví obrázek pozadí na navigačním panelu aplikace Shell:
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
[assembly: ExportRenderer(typeof(Xaminals.AppShell), typeof(Xaminals.iOS.MyShellRenderer))]
namespace Xaminals.iOS
{
public class MyShellRenderer : ShellRenderer
{
protected override IShellSectionRenderer CreateShellSectionRenderer(ShellSection shellSection)
{
var renderer = base.CreateShellSectionRenderer(shellSection);
if (renderer != null)
{
(renderer as ShellSectionRenderer).NavigationBar.SetBackgroundImage(UIImage.FromFile("monkey.png"), UIBarMetrics.Default);
}
return renderer;
}
}
}
Třída MyShellRenderer
přepíše metodu CreateShellSectionRenderer
a načte renderer vytvořený základní třídou. Potom upraví renderer nastavením obrázku na pozadí na navigačním panelu před vrácením rendereru.
Příklad Androidu
Následující příklad kódu ukazuje podtřídu ShellRenderer
, pro Android, který nastaví obrázek pozadí na navigačním panelu aplikace Shell:
using Android.Content;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
[assembly: ExportRenderer(typeof(Xaminals.AppShell), typeof(Xaminals.Droid.MyShellRenderer))]
namespace Xaminals.Droid
{
public class MyShellRenderer : ShellRenderer
{
public MyShellRenderer(Context context) : base(context)
{
}
protected override IShellToolbarAppearanceTracker CreateToolbarAppearanceTracker()
{
return new MyShellToolbarAppearanceTracker(this);
}
}
}
Třída MyShellRenderer
přepíše metodu CreateToolbarAppearanceTracker
a vrátí instanci MyShellToolbarAppearanceTracker
třídy. Třída MyShellToolbarAppearanceTracker
, která je odvozena z třídy, je uvedena v následujícím příkladu ShellToolbarAppearanceTracker
:
using AndroidX.AppCompat.Widget;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
namespace Xaminals.Droid
{
public class MyShellToolbarAppearanceTracker : ShellToolbarAppearanceTracker
{
public MyShellToolbarAppearanceTracker(IShellContext context) : base(context)
{
}
public override void SetAppearance(Toolbar toolbar, IShellToolbarTracker toolbarTracker, ShellAppearance appearance)
{
base.SetAppearance(toolbar, toolbarTracker, appearance);
toolbar.SetBackgroundResource(Resource.Drawable.monkey);
}
}
}
Třída MyShellToolbarAppearanceTracker
přepíše metodu SetAppearance
a upraví panel nástrojů nastavením obrázku na pozadí.
Důležité
Je nutné přidat do vlastního rendereru ExportRendererAttribute
, který je odvozen od ShellRenderer
třídy. Další podtřídě třídy rendereru prostředí jsou vytvořeny podtřídou ShellRenderer
třídy.