Display flyout of icon
Note
Bing Maps SDK for Android and iOS retirement
Bing Maps SDK for Android and iOS is deprecated and will be retired. Free (Basic) account customers can continue to use Bing Maps SDK for Android and iOS until June 30th, 2025. Enterprise account customers can continue to use Bing Maps SDK for Android and iOS until June 30th, 2028. To avoid service disruptions, all implementations using Bing Maps SDK for Android and iOS will need to be updated to use Azure Maps Web SDK by the retirement date that applies to your Bing Maps for Enterprise account type.
Azure Maps is Microsoft's next-generation maps and geospatial services for developers. Azure Maps has many of the same features as Bing Maps for Enterprise, and more. To get started with Azure Maps, create a free Azure subscription and an Azure Maps account. For more information about azure Maps, see Azure Maps Documentation. For migration guidance, see Bing Maps Migration Overview.
A Flyout is a simple panel that displays information over a map, often when an associated MapIcon is tapped.
Flyouts are represented by MapFlyout class.
Examples
Creating and displaying a default flyout
The following example shows how to create a flyout with title and description, and set it to an existing map icon. When
user taps an icon that has a flyout attached, flyout will be shown.
Flyouts are light-dismissable by default, meaning they can be hidden by tapping elsewhere. This behavior is controlled by
LightDismissEnabled property.
Java
MapFlyout flyout = new MapFlyout(); flyout.setTitle("Test"); flyout.setDescription("Sample description"); icon.setFlyout(flyout);
Swift
let flyout = MSMapFlyout() flyout.title = "Test" flyout.description = "Sample description" icon.flyout = flyout
Objective-C
MSMapFlyout *flyout = [MSMapFlyout flyout]; flyout.title = @"Test"; flyout.description = @"Sample description"; icon.flyout = flyout;
Creating and displaying a custom flyout
Flyouts also support custom views through MapFlyoutCustomViewAdapter interface.
Important: View will be rendered on canvas, with interactive elements no longer interactive.
Java
MapFlyout flyout = new MapFlyout(); flyout.setCustomViewAdapter(new MapFlyout.CustomViewAdapter() { @Override public View getFlyoutView(MapElement mapElement){ if (mapElement instanceof MapIcon) { MapIcon icon = (MapIcon)mapElement; // Retrieve title info and custom info stored in the Tag property. return new MyCustomFlyoutView(icon.getTitle(), icon.getTag()); } return null; } }); icon.setFlyout(flyout);
Swift
let flyout = MSMapFlyout() flyout.customViewAdapter = { (mapElement: MSMapElement) -> UIView? in if mapElement is MSMapIcon { let icon = mapElement as! MSMapIcon // Retrieve title info and custom info stored in the Tag property. return MyCustomFlyoutView(icon.title, icon.tag) } return nil } icon.flyout = flyout
Showing and hiding flyouts manually
Let's say you want to disable the default light dismiss behavior for flyouts. The following example shows how to hide all your flyouts at
once, assuming that pinLayer
variable is the map element layer with your map icons.
Java
for (MapElement element : pinLayer.getElements()) { if (element instanceof MapIcon) { MapFlyout flyout = ((MapIcon)element).getFlyout(); if (flyout != null) { flyout.hide(); } } }
Swift
for element in pinLayer.elements { let icon = element as? MSMapIcon icon?.flyout?.hide() }
Note: to be able to iterate through Elements
property of MapElementLayer
in Swift, you will need to add
Sequence extension for MSMapElementCollection.
Objective-C
for (MSMapElement *element in pinLayer.elements) { if ([element isKindOfClass:[MSMapIcon class]]) { MSMapIcon *icon = (MSMapIcon *)element; if (icon.flyout != nil) { [icon.flyout hide]; } } }