Fenêtres d'informations

Une fenêtre d'informations affiche du texte ou des images dans une fenêtre contextuelle au-dessus de la carte. Les fenêtres d'informations sont toujours ancrées à un repère. Leur comportement par défaut est de s'afficher dès que l'utilisateur appuie sur le repère.

Exemples de code

Le référentiel ApiDemos sur GitHub inclut un exemple qui présente toutes les fonctionnalités de la fenêtre d'informations :

  • MarkerDemoActivity : Personnaliser les fenêtres d'informations et utiliser les écouteurs de fenêtre d'informations

Introduction

Une fenêtre d'informations vous permet d'afficher des informations destinées à l'utilisateur lorsqu'il appuie sur un repère. Une seule fenêtre d'informations s'affiche à la fois. Si un utilisateur clique sur un repère, la fenêtre d'informations en cours est fermée et la nouvelle fenêtre d'informations apparaît. Notez que si l'utilisateur clique sur un repère qui affiche actuellement une fenêtre d'informations, celle-ci se ferme et s'ouvre de nouveau.

Une fenêtre d'informations est orientée par rapport à l'écran de l'appareil, centrée au-dessus du repère auquel elle est associée. La fenêtre d'information par défaut contient un titre en gras, avec le texte supplémentaire (facultatif) sous le titre.

Ajouter une fenêtre d'informations

Le moyen le plus simple d'ajouter une fenêtre d'informations consiste à définir les méthodes title() et snippet() du repère correspondant. La définition de ces propriétés entraîne l'affichage d'une fenêtre d'informations chaque fois que l'utilisateur clique sur ce repère.

static final LatLng MELBOURNE = new LatLng(-37.81319, 144.96298);
Marker melbourne = mMap.addMarker(new MarkerOptions()
                          .position(MELBOURNE)
                          .title("Melbourne")
                          .snippet("Population: 4,137,400"));

Afficher/masquer une fenêtre d'informations

Les fenêtres d'informations sont conçues pour répondre aux événements tactiles en provenance de l'utilisateur. Si vous préférez, vous pouvez afficher une fenêtre d'informations par programmation en appelant showInfoWindow() sur le repère cible. Une fenêtre d'informations peut être masquée en appelant hideInfoWindow().

static final LatLng MELBOURNE = new LatLng(-37.81319, 144.96298);
Marker melbourne = mMap.addMarker(new MarkerOptions()
                          .position(MELBOURNE)
                          .title("Melbourne"));
melbourne.showInfoWindow();

Vous pouvez également créer des fenêtres d'informations pour chaque repère d'un groupe de repères. Consultez le guide pour ajouter une fenêtre d'informations pour un repère appartenant à un groupe.

Fenêtres d'informations personnalisées

Vous avez également la possibilité de personnaliser le contenu et l'apparence des fenêtres d'informations. Pour ce faire, vous devez créer une implémentation concrète de l'interface InfoWindowAdapter, puis appeler GoogleMap.setInfoWindowAdapter() avec votre implémentation. L'interface contient deux méthodes à insérer : getInfoWindow(Marker) et getInfoContents(Marker). L'API appelle d'abord getInfoWindow(Marker) et si null est renvoyé, elle appelle getInfoContents(Marker). Si cette méthode renvoie également null, la fenêtre d'informations par défaut sera utilisée.

La première méthode (getInfoWindow()) vous permet de fournir une vue qui sera utilisée pour l'intégralité de la fenêtre d'informations. La seconde méthode (getInfoContents()) vous permet de personnaliser uniquement le contenu de la fenêtre, tout en conservant le cadre et l'arrière-plan de la fenêtre d'informations par défaut.

Les images ci-dessous montrent une fenêtre d'informations par défaut, une fenêtre d'informations avec du contenu personnalisé et une fenêtre d'informations avec un cadre et un arrière-plan personnalisés.

Comparaison des fenêtres d'informations

Événements de la fenêtre d'informations

L'exemple MarkerDemoActivity inclut un exemple de code qui permet d'enregistrer et de gérer les événements de la fenêtre d'informations.

Vous pouvez utiliser un OnInfoWindowClickListener pour écouter des événements de clic dans une fenêtre d'informations. Pour définir cet écouteur sur la carte, appelez GoogleMap.setOnInfoWindowClickListener(OnInfoWindowClickListener). Lorsqu'un utilisateur clique sur une fenêtre d'informations, la méthode onInfoWindowClick(Marker) est appelée et la fenêtre d'informations est mise en surbrillance dans la couleur de surbrillance par défaut (gris).

public class MarkerDemoActivity extends AppCompatActivity implements
        OnInfoWindowClickListener,
        OnMapReadyCallback {

    private GoogleMap mMap;

    @Override
    public void onMapReady(GoogleMap map) {
        mMap = map;
        // Add markers to the map and do other map setup.
        ...
        // Set a listener for info window events.
        mMap.setOnInfoWindowClickListener(this);
    }

    @Override
    public void onInfoWindowClick(Marker marker) {
        Toast.makeText(this, "Info window clicked",
                Toast.LENGTH_SHORT).show();
    }
}

De façon similaire, vous pouvez écouter les événements de clic long avec un écouteur OnInfoWindowLongClickListener, que vous pouvez définir en appelant GoogleMap.setOnInfoWindowLongClickListener(OnInfoWindowLongClickListener). Cet écouteur se comporte de la même façon que l'écouteur de clic et sera averti des événements de clic long avec un rappel onInfoWindowLongClick(Marker).

Pour être averti dès que la fenêtre d'informations se ferme, utilisez un écouteur OnInfoWindowCloseListener, que vous pouvez définir en appelant GoogleMap.setOnInfoWindowCloseListener(OnInfoWindowCloseListener). Vous recevrez un rappel onInfoWindowClose(Marker).

Remarque sur l'actualisation d'une fenêtre d'informations : L'événement onInfoWindowClose() se déclenche si l'utilisateur actualise une fenêtre d'informations en appuyant sur un repère qui a déjà une fenêtre d'informations ouverte. En revanche, si vous appelez Marker.showInfoWindow() par programmation sur une fenêtre d'informations ouverte, l'événement onInfoWindowClose() ne se déclenche pas. Ce second comportement se base sur l'hypothèse que vous savez que la fenêtre d'informations va se fermer et se rouvrir.

Comme indiqué dans la section précédente sur les fenêtres d'informations, une fenêtre d'informations n'est pas une vue en direct. La vue est simplement rendue en tant qu'image sur la carte. Par conséquent, tous les écouteurs que vous définissez sur la vue sont ignorés et vous ne pouvez pas distinguer les événements de clic à différents endroits de la vue. Il est recommandé de ne pas placer de composants interactifs (boutons, cases à cocher ou saisies de texte) dans votre fenêtre d'informations personnalisée.