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:
- Sınıfın
Shell
alt sınıfı. Bu, Shell uygulamanızda zaten gerçekleştirilecektir. - Alt sınıf sınıfını
Shell
kullanma. Bu, Shell uygulamanızda zaten gerçekleştirilecektir. - 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:
- sınıfının bir alt sınıfını
ShellRenderer
oluşturun. - Gerekli özelleştirmeyi gerçekleştirmek için gerekli yöntemleri geçersiz kılın.
- Shell uygulamasını işlemek için kullanılacağını belirtmek için alt sınıfa bir
ExportRendererAttribute
ShellRenderer
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 FlyoutItem
Tab
özel işleyici oluşturulurken yönteminin geçersiz kılınması gerekir.
Önemli
iOS, Android ve UWP'de ve ShellItemRenderer
gibi 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ı ShellRenderer
bir öğ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ı ShellRenderer
bir öğ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.