Xamarin.Forms Kabuk özel işleyicileri

Kabuk uygulamalarının Xamarin.Forms avantajlarından biri, çeşitli Kabuk sınıflarının kullanıma sağladığı özellikler ve yöntemler aracılığıyla görünümlerinin ve davranışlarının yüksek oranda özelleştirilebilir olmasıdır. Ancak, platforma özgü daha kapsamlı özelleştirmeler gerektiğinde bir Shell özel işleyicisi oluşturmak da mümkündür. Diğer özel işleyicilerde olduğu gibi, görünümü ve davranışı özelleştirmek için yalnızca bir platform projesine bir Shell özel işleyicisi eklenebilir ve diğer platformda varsayılan davranışa izin verir; veya hem iOS hem de Android'de görünümü ve davranışı özelleştirmek için her platform projesine farklı bir Kabuk özel işleyicisi eklenebilir.

Kabuk uygulamaları iOS ve Android'de sınıfı kullanılarak ShellRenderer işlenir. iOS'ta sınıfı ShellRenderer ad alanında Xamarin.Forms.Platform.iOS bulunabilir. Android'de sınıfı ad ShellRenderer alanında Xamarin.Forms.Platform.Android bulunabilir.

Kabuk özel işleyicisi oluşturma işlemi aşağıdaki gibidir:

  1. Sınıfın Shell alt sınıfı. Bu, Shell uygulamanızda zaten gerçekleştirilecektir.
  2. Alt sınıf sınıfını Shell kullanma. Bu, Shell uygulamanızda zaten gerçekleştirilecektir.
  3. Gerekli platformlarda sınıfından ShellRenderer türetilen özel bir işleyici sınıfı oluşturun.

Özel işleyici sınıfı oluşturma

Kabuk özel işleyici sınıfı oluşturma işlemi aşağıdaki gibidir:

  1. sınıfının bir alt sınıfını ShellRenderer oluşturun.
  2. Gerekli özelleştirmeyi gerçekleştirmek için gerekli yöntemleri geçersiz kılın.
  3. Shell uygulamasını işlemek için kullanılacağını belirtmek için alt sınıfa bir ExportRendererAttributeShellRenderer ekleyin. Bu öznitelik, özel işleyiciyi ile Xamarin.Formskaydetmek için kullanılır.

Not

Her platform projesinde bir Shell özel işleyicisi sağlamak isteğe bağlıdır. Özel işleyici kaydedilmediyse, varsayılan ShellRenderer sınıf kullanılır.

ShellRenderer sınıfı aşağıdaki geçersiz kılınabilir yöntemleri kullanıma sunar:

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

FlyoutItem ve TabBar sınıfları sınıfın ShellItem diğer adlarıdır ve Tab sınıfı da sınıfın ShellSection diğer adıdır. Bu nedenle, CreateShellItemRenderer nesneler için özel işleyici oluşturulurken yöntemin geçersiz kılınması ve CreateShellSectionRenderer nesneler için FlyoutItemTab özel işleyici oluşturulurken yönteminin geçersiz kılınması gerekir.

Önemli

iOS, Android ve UWP'de ve ShellItemRenderergibi ShellSectionRenderer ek Kabuk işleyici sınıfları vardır. Ancak, bu ek işleyici sınıfları sınıfındaki ShellRenderer geçersiz kılmalar tarafından oluşturulur. Bu nedenle, bu ek işleyici sınıflarının davranışını özelleştirmek alt sınıflandırılarak ve alt sınıflanmış ShellRenderer sınıfta uygun geçersiz kılmada alt sınıfın bir örneği oluşturularak elde edilebilir.

iOS örneği

Aşağıdaki kod örneği, Shell uygulamasının gezinti çubuğunda bir arka plan görüntüsü ayarlayan iOS için alt sınıflı ShellRendererbir öğesini gösterir:

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

sınıfı MyShellRenderer yöntemini geçersiz kılar CreateShellSectionRenderer ve temel sınıf tarafından oluşturulan işleyiciyi alır. Ardından işleyiciyi döndürmeden önce gezinti çubuğunda bir arka plan görüntüsü ayarlayarak işleyiciyi değiştirir.

Android örneği

Aşağıdaki kod örneği, Shell uygulamasının gezinti çubuğunda bir arka plan görüntüsü ayarlayan, Android için alt sınıflı ShellRendererbir öğesini gösterir:

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

sınıfı MyShellRenderer yöntemini geçersiz kılar CreateToolbarAppearanceTracker ve sınıfının bir örneğini MyShellToolbarAppearanceTracker döndürür. MyShellToolbarAppearanceTracker sınıfından ShellToolbarAppearanceTracker türetilen sınıfı aşağıdaki örnekte gösterilmiştir:

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

sınıfı MyShellToolbarAppearanceTracker yöntemini geçersiz kılar SetAppearance ve araç çubuğunda bir arka plan görüntüsü ayarlayarak araç çubuğunu değiştirir.

Önemli

Yalnızca sınıfından ExportRendererAttribute türetilen ShellRenderer bir özel işleyiciye öğesini eklemek gerekir. Ek alt sınıflanmış Kabuk işleyici sınıfları, alt sınıflanmış ShellRenderer sınıf tarafından oluşturulur.