Xamarin.Forms.Maps.Map
コントロールを使用する際に現在位置表示、ズーム機能をONにしていると、Android版では地図上にボタンが表示されます。(iOSでは表示されない)
iOSと揃えたい、デザインが他と馴染まないので自前で用意したいという場合は邪魔になるので、Effectでネイティブコントロールに介入して消してしまいましょう。
Androidプロジェクト内に新しいEffectクラスを作ります。
using System; using Xamarin.Forms; using Xamarin.Forms.Platform.Android; using Android.Gms.Maps; [assembly: ResolutionGroupName ("YourCompany")] [assembly: ExportEffect (typeof (SuppressMapButton.Droid.SuppressMapButtonEffect), "SuppressMapButtonEffect")] namespace SuppressMapButton.Droid { public class SuppressMapButtonEffect : PlatformEffect { #region implemented abstract members of Effect protected override void OnAttached() { var mapView = Control as MapView; if(mapView == null) return; // ズームボタン LinearLayout var zoomButton = mapView.FindViewById(1); if(zoomButton != null) { zoomButton.Visibility = Android.Views.ViewStates.Gone; } // 現在位置ボタン ImageView var locationButton = mapView.FindViewById(2); if(locationButton != null) { locationButton.Visibility = Android.Views.ViewStates.Gone; } } protected override void OnDetached() { } #endregion } }
2016年2月現在では Id:1 がズームボタン、 Id:2 が現在位置ボタンとなっていました。 値の根拠はmapViewStyleになると思うのですがソースを見つけられなかったので確認できてません。
使用する側はこんな感じ。
public App() { MainPage = new ContentPage { Content = new Xamarin.Forms.Maps.Map { IsShowingUser = true, HasZoomEnabled = true, Effects = { Effect.Resolve("YourCompany.SuppressMapButtonEffect"), }, }, }; }
見事、地図上のボタンを消せました。