Sdílet prostřednictvím


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 ShellRendererXamarin.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í:

  1. Podtřídy Shell třídy. To už bude provedeno ve vaší aplikaci Shell.
  2. Spotřebujte podtřídu Shell třídy. To už bude provedeno ve vaší aplikaci Shell.
  3. 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í:

  1. Vytvořte podtřídu ShellRenderer třídy.
  2. Přepište požadované metody pro provedení požadovaného přizpůsobení.
  3. Přidejte do ShellRenderer podtřídy a ExportRendererAttribute 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 ShellSectionRendererShellItemRenderera . 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.