Udostępnij za pośrednictwem


Xamarin.Forms Niestandardowe programy renderowania powłoki

Jedną z zalet aplikacji powłoki Xamarin.Forms jest to, że ich wygląd i zachowanie można w dużym stopniu dostosowywać za pomocą właściwości i metod udostępnianych przez różne klasy powłoki. Istnieje jednak również możliwość utworzenia niestandardowego modułu renderowania powłoki, gdy wymagane są bardziej rozbudowane dostosowania specyficzne dla platformy. Podobnie jak w przypadku innych niestandardowych modułów renderujących, niestandardowy moduł renderujący powłoki można dodać do tylko jednego projektu platformy w celu dostosowania wyglądu i zachowania, jednocześnie zezwalając na domyślne zachowanie na innej platformie; lub inny niestandardowy moduł renderowania powłoki można dodać do każdego projektu platformy w celu dostosowania wyglądu i zachowania zarówno w systemach iOS, jak i Android.

Aplikacje powłoki są renderowane przy użyciu ShellRenderer klasy w systemach iOS i Android. W systemie iOS klasę ShellRenderer można znaleźć w Xamarin.Forms.Platform.iOS przestrzeni nazw. W systemie Android klasę ShellRenderer można znaleźć w Xamarin.Forms.Platform.Android przestrzeni nazw.

Proces tworzenia niestandardowego modułu renderowania powłoki jest następujący:

  1. Podklasa Shell klasy . Ta funkcja zostanie już wykonana w aplikacji powłoki.
  2. Zużyj podklasę Shell klasy. Ta funkcja zostanie już wykonana w aplikacji powłoki.
  3. Utwórz niestandardową klasę renderera, która pochodzi z ShellRenderer klasy na wymaganych platformach.

Tworzenie niestandardowej klasy modułu renderowania

Proces tworzenia niestandardowej klasy renderera powłoki jest następujący:

  1. Utwórz podklasę ShellRenderer klasy.
  2. Zastąpij wymagane metody w celu wykonania wymaganego dostosowania.
  3. Dodaj element ExportRendererAttribute do podklasy ShellRenderer , aby określić, że będzie on używany do renderowania aplikacji powłoki. Ten atrybut służy do rejestrowania niestandardowego modułu renderowania za pomocą Xamarin.Formspolecenia .

Uwaga

Opcjonalne jest udostępnienie niestandardowego modułu renderowania powłoki w każdym projekcie platformy. Jeśli niestandardowy moduł renderowania nie jest zarejestrowany, zostanie użyta klasa domyślna ShellRenderer .

Klasa ShellRenderer uwidacznia następujące metody, które można zastąpić:

iOS Android Platforma 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

Klasy FlyoutItem i TabBar są aliasami dla ShellItem klasy, a Tab klasa jest aliasem dla ShellSection klasy. CreateShellItemRenderer W związku z tym metoda powinna zostać zastąpiona podczas tworzenia niestandardowego modułu renderowania dla FlyoutItem obiektów, a CreateShellSectionRenderer metoda powinna zostać zastąpiona podczas tworzenia niestandardowego modułu renderowania dla Tab obiektów.

Ważne

Istnieją dodatkowe klasy modułu renderowania powłoki, takie jak ShellSectionRenderer i ShellItemRenderer, w systemach iOS, Android i UWP. Jednak te dodatkowe klasy renderera są tworzone przez przesłonięcia w ShellRenderer klasie. W związku z tym dostosowanie zachowania tych dodatkowych klas renderujących można osiągnąć przez ich podklasę i utworzenie wystąpienia podklasy w odpowiedniej przesłonięci w podklasie ShellRenderer .

Przykład systemu iOS

Poniższy przykład kodu przedstawia podklasę ShellRenderer, dla systemu iOS, która ustawia obraz tła na pasku nawigacyjnym aplikacji 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;
        }
    }
}

Klasa MyShellRenderer zastępuje metodę CreateShellSectionRenderer i pobiera moduł renderowania utworzony przez klasę bazową. Następnie modyfikuje program renderujący, ustawiając obraz tła na pasku nawigacyjnym przed zwróceniem modułu renderowania.

Przykład systemu Android

Poniższy przykład kodu przedstawia podklasę ShellRendererdla systemu Android, która ustawia obraz tła na pasku nawigacyjnym aplikacji 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);
        }
    }
}

Klasa MyShellRenderer zastępuje metodę CreateToolbarAppearanceTracker i zwraca wystąpienie MyShellToolbarAppearanceTracker klasy. Klasa MyShellToolbarAppearanceTracker , która pochodzi z ShellToolbarAppearanceTracker klasy, jest pokazana w poniższym przykładzie:

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);
        }
    }
}

Klasa MyShellToolbarAppearanceTracker zastępuje metodę SetAppearance i modyfikuje pasek narzędzi, ustawiając na nim obraz tła.

Ważne

Wystarczy dodać element ExportRendererAttribute do niestandardowego modułu renderowania pochodzącego ShellRenderer z klasy . Dodatkowe klasy modułu renderowania powłoki podrzędnej są tworzone przez klasę podrzędną ShellRenderer .