NavigationPage를 사용할 때 ActionBar 아이콘을 지우는 방법

이 페이지에는 NavigationPage를 사용하여 화면 전환이 있는 앱을 만드는 자습서가 있습니다.
Xamarin.Forms Multiscreen Quickstart

이 설명대로 앱을 만들면 아래 그림과 같은 아이콘이 표시됩니다.


이 아이콘을 지우는 방법이 없는지 생각해 보면서 두 가지 방법을 발견했습니다.
 (1) MainActivity.cs중의 속성중에 지정되고 있는 "Icon"에, 투명한 아이콘을 지정하는 방법
 (2) 렌더러로 투명한 아이콘을 지정하는 방법

둘 다 시도했지만 (1)의 방법은 문제가 있음을 알았습니다. 그래서 메모해 둡니다.

(1) MainActivity.cs의 속성에 손을 추가하는 방법



Phoneword.Droid 프로젝트 내에 존재하는 "MainActivity.cs"를 열면 다음과 같은 코드가 존재합니다.

MainActivity.cs
    [Activity(Label = "Phoneword", Icon = "@drawable/icon", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            global::Xamarin.Forms.Forms.Init(this, bundle);
            LoadApplication(new App());
        }
    }


 [Activity(Label = "Phoneword", Icon = "@drawable/icon"...
의 부분의 "Icon"으로 지정되어 있는 아이콘의 그림을, 투명한 그림을 지정하는 것으로 아이콘의 비표시화를 하는 방법이 소개되고 있는 페이지가 있었습니다.

아래와 같이 투명 아이콘 그림을 준비하고 ...



Activity 속성의 "Icon"부분을 다음과 같이 바꿉니다.
  [Activity(Label = "Phoneword", Icon = "@drawable/transparent"...

이렇게하면 확실히 ActionBar에 아이콘이 숨겨져 있습니다 (실제로 투명한 아이콘이 표시됩니다).



홈 화면으로 돌아가서, 이 앱의 아이콘을 보면, 보시다시피 아이콘이 표시되지 않게 됩니다.



이 방법은 조금 사용할 수 없습니다.

(2) 렌더러에서 투명한 아이콘을 지정하는 방법



또 하나 소개되고 있던 것이 이 방법입니다. 이하, 이 방법으로 소개되고 있던 소스 코드입니다.

MainActivity.cs
[assembly: ExportRenderer(typeof(NavigationPage), typeof(CustomNavigationRenderer))] // (1)

namespace Phoneword.Droid
{
    [Activity(Label = "Phoneword", Icon = "@drawable/icon", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            global::Xamarin.Forms.Forms.Init(this, bundle);
            LoadApplication(new App());
        }
    }

    // これがアイコンを非表示にするプログラム
    class CustomNavigationRenderer : NavigationRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<NavigationPage> e)
        {
            base.OnElementChanged(e);

            var actionBar = ((Activity)Context).ActionBar;
            actionBar.SetIcon(Android.Resource.Color.Transparent);
        }
    }
}

코드의 (1)에서는 렌더러의 assembly를로드하고있는 것 같습니다. 그리고 CustomeNavigationRenderer 클래스에서 아이콘을 숨기고 있습니다.
var actionBar = ((Activity)Context).ActionBar;
위의 부분에서 ActionBar의 인스턴스를 가져옵니다. 이 "Context"는 NavigationRenderer 클래스의 속성으로 Android 화면 (= Activity)을 가지고있는 것 같습니다. 여기에서 ActionBar에 액세스할 수 있는 것 같습니다.
그래서, 그 액션 바의 아이콘을 투명하게하기 위해,
actionBar.SetIcon(Android.Resource.Color.Transparent);
라고 하는 것처럼 투명색을 하고 있는 것 같네요.

이렇게 하면 응용프로그램 아이콘이 계속 표시되고 액션 바 아이콘은 숨길 수 있습니다.

좋은 웹페이지 즐겨찾기