Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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
Shelltřídy. To už bude provedeno ve vaší aplikaci Shell. - Spotřebujte podtřídu
Shelltřídy. To už bude provedeno ve vaší aplikaci Shell. - Vytvořte vlastní třídu rendereru, která je odvozena z
ShellRenderertří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
ShellRenderertřídy. - Přepište požadované metody pro provedení požadovaného přizpůsobení.
- Přidejte do
ShellRendererpodtřídy aExportRendererAttributeurč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 |
|---|---|---|
SetElementSizeCreateFlyoutRendererCreateNavBarAppearanceTrackerCreatePageRendererTrackerCreateShellFlyoutContentRendererCreateShellItemRendererCreateShellItemTransitionCreateShellSearchResultsRendererCreateShellSectionRendererCreateTabBarAppearanceTrackerDisposeOnCurrentItemChangedOnElementPropertyChangedOnElementSetUpdateBackgroundColor |
CreateFragmentForPageCreateShellFlyoutContentRendererCreateShellFlyoutRendererCreateShellItemRendererCreateShellSectionRendererCreateTrackerForToolbarCreateToolbarAppearanceTrackerCreateTabLayoutAppearanceTrackerCreateBottomNavViewAppearanceTrackerOnElementPropertyChangedOnElementSetSwitchFragmentDispose |
CreateShellFlyoutTemplateSelectorCreateShellHeaderRendererCreateShellItemRendererCreateShellSectionRendererOnElementPropertyChangedOnElementSetUpdateFlyoutBackdropColorUpdateFlyoutBackgroundColor |
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 ShellItemRenderera . 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.