Xamarin.Forms Convertisseurs personnalisés shell
L’un des avantages des Xamarin.Forms applications Shell est que leur apparence et leur comportement sont hautement personnalisables par le biais des propriétés et méthodes exposées par les différentes classes Shell. Toutefois, il est également possible de créer un renderer personnalisé Shell quand des personnalisations spécifiques à la plateforme sont requises. Comme avec d’autres renderers personnalisés, un renderer Shell personnalisé peut être ajouté à un projet de plateforme unique afin de personnaliser son apparence et son comportement, tout en autorisant le comportement par défaut sur l’autre plate-forme ; ou un renderer Shell différent peut être ajouté à chaque projet de plateforme pour personnaliser son apparence et son comportement à la fois sur iOS et Android.
Les applications Shell sont rendues à l’aide de la classe ShellRenderer
sur iOS et Android. Sur iOS, la classe ShellRenderer
figure dans l’espace de noms Xamarin.Forms.Platform.iOS
. Sur Android, la classe ShellRenderer
figure dans l’espace de noms Xamarin.Forms.Platform.Android
.
Le processus de création d’un renderer personnalisé Shell est le suivant :
- Créez une sous-classe de la classe
Shell
. Cette opération sera déjà effectuée dans votre application Shell. - Consommez la classe
Shell
définie comme une sous-classe. Cette opération sera déjà effectuée dans votre application Shell. - Créez une classe de renderer personnalisée dérivée de la classe
ShellRenderer
, sur les plateformes requises.
Créer une classe de renderer personnalisée
Le processus de création d’une classe de renderer personnalisée Shell est le suivant :
- Créez une sous-classe de la classe
ShellRenderer
. - Remplacez les méthodes requises pour effectuer la personnalisation nécessaire.
- Ajoutez un élément
ExportRendererAttribute
à la sous-classeShellRenderer
pour indiquer qu’elle est utilisée pour le rendu de l’application Shell. Cet attribut est utilisé pour inscrire le renderer personnalisé avec Xamarin.Forms.
Remarque
Cet attribut est facultatif pour fournir un renderer personnalisé Shell dans chaque projet de plateforme. Si aucun renderer personnalisé n’est inscrit, la valeur de classe par défaut ShellRenderer
sera utilisée.
La classe ShellRenderer
expose les méthodes substituables suivantes :
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 |
Les classes FlyoutItem
et TabBar
sont des alias pour la classe ShellItem
, et la classe Tab
est un alias pour la classe ShellSection
. La méthode CreateShellItemRenderer
doit donc être substituée lors de la création d’un renderer personnalisé pour des objets FlyoutItem
et la méthode CreateShellSectionRenderer
doit être substituée lors de la création d’un renderer personnalisé pour des objets Tab
.
Important
Il existe des classes de renderer Shell supplémentaires, telles que ShellSectionRenderer
ShellItemRenderer
et , sur iOS, Android et UWP. Toutefois, ces classes de renderer supplémentaires sont créées par des remplacements dans la classe ShellRenderer
. Par conséquent, il est possible de personnaliser le comportement de ces classes de renderer supplémentaires en les sous-classant et en créant une instance de la sous-classe dans la substitution correspondante de la classe ShellRenderer
sous-classée.
Exemple iOS
L’exemple de code suivant montre une classe ShellRenderer
sous-classée pour iOS, qui définit une image d’arrière-plan dans la barre de navigation de l’application 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;
}
}
}
La classe MyShellRenderer
remplace la méthode CreateShellSectionRenderer
, puis récupère le renderer créé par la classe de base. Elle modifie ensuite le renderer en définissant une image d’arrière-plan dans la barre de navigation, avant de retourner le renderer.
Exemple Android
L’exemple de code suivant montre une classe ShellRenderer
sous-classée pour Android, qui définit une image d’arrière-plan dans la barre de navigation de l’application 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);
}
}
}
La classe MyShellRenderer
remplace la méthode CreateToolbarAppearanceTracker
, puis retourne une instance de la classe MyShellToolbarAppearanceTracker
. La classe MyShellToolbarAppearanceTracker
qui dérive de la classe ShellToolbarAppearanceTracker
, est illustrée dans l’exemple suivant :
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);
}
}
}
La classe MyShellToolbarAppearanceTracker
remplace la méthode SetAppearance
, puis modifie la barre d’outils en définissant une image d’arrière-plan sur celle-ci.
Important
Il est uniquement nécessaire d’ajouter l’attribut ExportRendererAttribute
à un renderer personnalisé qui dérive de la classe ShellRenderer
. Les classes de renderer Shell sous-classées supplémentaires sont créées par les classes ShellRenderer
sous-classées.