Xamarin.Forms NavigationPageでアクションバーのアイコンを非表示にする(Android)
アクションバーのアイコン
Xamarin.FormsでNavigationPageを使用すると、Androidでは、ページの左上にアイコンが表示されます。
このアイコンの消す方法は、Xamarin.Formsの機能としては提供されておらず、力づくなら、背景色に紛れた1ドットのアイコンなどに置き換えるしかないようです。
今回は、NavigationPageのレンダラーを記述して、正規に(?)、このアイコンを非表示にする方法が、Xamarinのフォーラムで紹介されていたので、ここに記録しました。
NavigationPage
NavigationPageを使用したPCL側のコードです。
レンダラー記述のためだけにNavigationPageの拡張クラス(ExNavigationPage)を作成しています。
//App.cs using Xamarin.Forms; namespace App1{ public class App : Application{ public App(){ //ルートビューをNavigationPageにする MainPage = new ExNavigationPage(new MainPage()); } //・・・省略・・・ } //拡張NavigationPage レンダラのためだけのクラス public class ExNavigationPage : NavigationPage { public ExNavigationPage(Page root) : base(root) {} } class MainPage : ContentPage { public MainPage() { //中央にラベル「MainPage」を配置する Content = new StackLayout { VerticalOptions = LayoutOptions.Center, Children = { new Label { XAlign = TextAlignment.Center, Text="MainPage" } } }; } } }
レンダラー
レンダラー側のコードは、次のようになります。
NavigationRendererクラスの、ContextプロパティがActivityクラスなので、そこからActionBarオブジェクトへたどれます。
ActionBarオブジェクトのSetIconメソッドで、Android.Resource.Color.Transparentを指定すると、アイコンは非表示になります。
//ExNavigationPageRenderer.cs using Android.App; using Xamarin.Forms; using Xamarin.Forms.Platform.Android; [assembly: ExportRenderer(typeof(ExNavigationPage), typeof(ExNavigationPageRenderer))] namespace App1.Droid{ class ExNavigationPageRenderer : NavigationRenderer{ protected override void OnElementChanged(ElementChangedEventArgs<NavigationPage> e) { base.OnElementChanged(e); var actionBar = ((Activity)Context).ActionBar; actionBar.SetIcon(Android.Resource.Color.Transparent); } } }
ActionBarオブジェクトのメソッドである、SetDisplayShowHomeEnabledやSetDisplayShowTitleEnabledは、この場合、有効に機能しません。
//このコードで、アイコンの非表示やタイトルバーの非表示はできない actionBar.SetDisplayShowHomeEnabled(false); actionBar.SetDisplayShowTitleEnabled(false);
参考資料
Remove icon from action bar from xamarin forms android project - Xamarin Forums
xml - Remove icon/logo from action bar on android - Stack Overflow