Xamarin.Forms Shell 사용자 지정 렌더러Xamarin.Forms Shell Custom Renderers

Xamarin.Forms Shell 애플리케이션의 이점 중 하나는 다양한 셸 클래스가 공개하는 속성 및 메서드를 통해 해당 모양과 동작을 세부적으로 사용자 지정할 수 있다는 것입니다.One of the advantages of Xamarin.Forms Shell applications is that their appearance and behavior is highly customizable through the properties and methods that the various Shell classes expose. 그러나 더 정교한 플랫폼별 사용자 지정이 필요한 경우에는 셸 사용자 지정 렌더러를 만들 수도 있습니다.However, it's also possible to create a Shell custom renderer when more sophisticated platform-specific customizations are required. 다른 사용자 지정 렌더러와 마찬가지로, 다른 플랫폼에서 기본 동작을 허용하는 동안 셸 사용자 지정 렌더러를 하나의 플랫폼 프로젝트에만 추가하여 모양과 동작을 사용자 지정할 수 있습니다. 또는 다른 셸 사용자 지정 렌더러를 각 플랫폼 프로젝트에 추가하여 iOS 및 Android에서 모양과 동작을 사용자 지정할 수 있습니다.As with other custom renderers, a Shell custom renderer can be added to just one platform project to customize appearance and behavior, while allowing the default behavior on the other platform; or a different Shell custom renderer can be added to each platform project to customize appearance and behavior on both iOS and Android.

iOS 및 Android에서는 ShellRenderer 클래스를 사용하여 셸 애플리케이션을 렌더링합니다.Shell applications are rendered using the ShellRenderer class on iOS and Android. iOS에서 ShellRenderer 클래스는 Xamarin.Forms.Platform.iOS 네임스페이스에서 찾을 수 있습니다.On iOS, the ShellRenderer class can be found in the Xamarin.Forms.Platform.iOS namespace. Android에서 ShellRenderer 클래스는 Xamarin.Forms.Platform.Android 네임스페이스에서 찾을 수 있습니다.On Android, the ShellRenderer class can be found in the Xamarin.Forms.Platform.Android namespace.

셸 사용자 지정 렌더러를 만드는 프로세스는 다음과 같습니다.The process for creating a Shell custom renderer is as follows:

  1. Shell 클래스를 서브클래싱합니다.Subclass the Shell class. 이 작업은 이미 셸 애플리케이션에서 수행됩니다.This will already be accomplished in your Shell application.
  2. 서브클래싱된 Shell 클래스를 사용합니다.Consume the subclassed Shell class. 이 작업은 이미 셸 애플리케이션에서 수행됩니다.This will already be accomplished in your Shell application.
  3. ShellRenderer 클래스에서 파생되는 사용자 지정 렌더러 클래스를 필요한 플랫폼에서 만듭니다.Create a custom renderer class that derives from the ShellRenderer class, on the required platforms.

사용자 지정 렌더러 클래스 만들기Create a custom renderer class

셸 사용자 지정 렌더러 클래스를 만드는 프로세스는 다음과 같습니다.The process for creating a Shell custom renderer class is as follows:

  1. ShellRenderer 클래스의 서브클래스를 만듭니다.Create a subclass of the ShellRenderer class.
  2. 필요한 사용자 지정을 수행하도록 필요한 메서드를 재정의합니다.Override the required methods to perform the required customization.
  3. ShellRenderer 서브클래스에 ExportRendererAttribute를 추가하여 셸 애플리케이션을 렌더링하는 데 사용하도록 지정합니다.Add an ExportRendererAttribute to the ShellRenderer subclass, to specify that it will be used to render the Shell application. 이 특성은 사용자 지정 랜더러를 Xamarin.Forms에 등록하는 데 사용됩니다.This attribute is used to register the custom renderer with Xamarin.Forms.

참고

각 플랫폼 프로젝트에서 셸 사용자 지정 렌더러를 제공하는 것은 선택 사항입니다.It's optional to provide a Shell custom renderer in each platform project. 사용자 지정 렌더러가 등록되지 않은 경우 기본 ShellRenderer 클래스가 사용됩니다.If a custom renderer isn't registered, then the default ShellRenderer class will be used.

ShellRenderer 클래스는 다음 재정의 가능한 메서드를 공개합니다.The ShellRenderer class exposes the following overridable methods:

iOSiOS AndroidAndroid
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

FlyoutItemTabBar 클래스는 ShellItem 클래스의 별칭이고 Tab 클래스는 ShellSection 클래스의 별칭입니다.The FlyoutItem and TabBar classes are aliases for the ShellItem class, and the Tab class is an alias for the ShellSection class. 따라서 FlyoutItem 개체의 사용자 지정 렌더러를 만들 때는 CreateShellItemRenderer 메서드를 재정의하고 Tab 개체의 사용자 지정 렌더러를 만들 때는 CreateShellSectionRenderer 메서드를 재정의해야 합니다.Therefore, the CreateShellItemRenderer method should be overridden when creating a custom renderer for FlyoutItem objects, and the CreateShellSectionRenderer method should be overridden when creating a custom renderer for Tab objects.

중요

iOS 및 Android에는 둘 다 ShellSectionRendererShellItemRenderer와 같은 셸 렌더러 클래스가 있습니다.There are additional Shell renderer classes, such as ShellSectionRenderer and ShellItemRenderer, on both iOS and Android. 그러나 이 추가 렌더러 클래스는 ShellRenderer 클래스에서 재정의를 통해 생성됩니다.However, these additional renderer classes are created by overrides in the ShellRenderer class. 따라서 이 추가 렌더러 클래스의 동작을 사용자 지정하려면 해당 클래스를 서브클래싱하고 서브클래싱된 ShellRenderer 클래스에서 적절한 재정의로 서브클래스 인스턴스를 만들면 됩니다.Therefore, customizing the behavior of these additional renderer classes can be achieved by subclassing them, and creating an instance of the subclass in the appropriate override in the subclassed ShellRenderer class.

iOS 예제iOS example

다음 코드 예제에서는 iOS의 경우 셸 애플리케이션의 탐색 모음에서 배경 이미지를 설정하는 서브클래싱된 ShellRenderer를 보여 줍니다.The following code example shows a subclassed ShellRenderer, for iOS, that sets a background image on the navigation bar of the Shell application:

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

MyShellRenderer 클래스는 CreateShellSectionRenderer 메서드를 재정의하고 기본 클래스를 통해 생성된 렌더러를 검색합니다.The MyShellRenderer class overrides the CreateShellSectionRenderer method, and retrieves the renderer created by the base class. 그런 다음, 렌더러를 반환하기 전에 탐색 모음에서 배경 이미지를 설정하여 렌더러를 수정합니다.It then modifies the renderer by setting a background image on the navigation bar, before returning the renderer.

Android 예제Android example

다음 코드 예제에서는 Android의 경우 셸 애플리케이션의 탐색 모음에서 배경 이미지를 설정하는 서브클래싱된 ShellRenderer를 보여 줍니다.The following code example shows a subclassed ShellRenderer, for Android, that sets a background image on the navigation bar of the Shell application:

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

MyShellRenderer 클래스는 CreateToolbarAppearanceTracker 메서드를 재정의하고 MyShellToolbarAppearanceTracker 클래스의 인스턴스를 반환합니다.The MyShellRenderer class overrides the CreateToolbarAppearanceTracker method, and returns an instance of the MyShellToolbarAppearanceTracker class. 다음 예제에서는 ShellToolbarAppearanceTracker에서 파생된 MyShellToolbarAppearanceTracker 클래스를 보여 줍니다.The MyShellToolbarAppearanceTracker class, which derives from the ShellToolbarAppearanceTracker class, is shown in the following example:

using Android.Support.V7.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);
        }
    }
}

MyShellToolbarAppearanceTracker 클래스는 SetAppearance 메서드를 재정의하며 도구 모음에서 배경 이미지를 설정하여 도구 모음을 수정합니다.The MyShellToolbarAppearanceTracker class overrides the SetAppearance method, and modifies the toolbar by setting a background image on it.

중요

ShellRenderer 클래스에서 파생된 사용자 지정 렌더러에 ExportRendererAttribute를 추가하면 됩니다.It's only necessary to add the ExportRendererAttribute to a custom renderer that derives from the ShellRenderer class. 서브클래싱된 ShellRenderer 클래스를 통해 추가적인 서브클래싱된 셸 렌더러 클래스가 만들어집니다.Additional subclassed Shell renderer classes are created by the subclassed ShellRenderer class.