Finestre informative

Seleziona piattaforma: Android iOS JavaScript

Una finestra informativa mostra testo o immagini in una finestra popup sopra la mappa. Le finestre informative sono sempre ancorate a un indicatore. Il loro comportamento predefinito è la visualizzazione quando viene toccato l'indicatore.

Esempi di codice

Il repository APIApi su GitHub include un campione che mostra tutte le funzionalità della finestra informativa:

Introduzione

Una finestra informativa consente di mostrare informazioni all'utente quando tocca un indicatore. Viene visualizzata una sola finestra informativa alla volta. Se un utente fa clic su un indicatore, la finestra informativa corrente verrà chiusa e verrà visualizzata la nuova finestra informativa. Tieni presente che se l'utente fa clic su un indicatore che attualmente mostra la finestra informativa, la finestra informativa si chiude e si riapre.

Viene disegnata una finestra informativa orientata sullo schermo del dispositivo, centrato sopra l'indicatore associato. La finestra informativa predefinita contiene il titolo in grassetto, con lo snippet (facoltativo) sotto il titolo.

Aggiungere una finestra informativa

Il modo più semplice per aggiungere una finestra informativa è impostare i metodi title() e snippet() dell'indicatore corrispondente. Se imposti queste proprietà, verrà visualizzata una finestra informativa ogni volta che viene fatto clic sull'indicatore.

Java


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

      

Kotlin


val melbourneLatLng = LatLng(-37.81319, 144.96298)
val melbourne = map.addMarker(
    MarkerOptions()
        .position(melbourneLatLng)
        .title("Melbourne")
        .snippet("Population: 4,137,400")
)

      

Mostra/nascondi una finestra informativa

Le finestre informative sono progettate per rispondere agli eventi touch degli utenti. Se preferisci, puoi mostrare una finestra informativa a livello di programmazione chiamando showInfoWindow() sull'indicatore di destinazione. Una finestra informativa può essere nascosta chiamando hideInfoWindow().

Java


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

      

Kotlin


val melbourneLatLng = LatLng(-37.81319, 144.96298)
val melbourne = map.addMarker(
    MarkerOptions()
        .position(melbourneLatLng)
        .title("Melbourne")
)
melbourne?.showInfoWindow()

      

Puoi anche creare finestre informative per singoli indicatori in cluster. Leggi la guida all'aggiunta di una finestra informativa per singoli indicatori in cluster.

Finestre informative personalizzate

Puoi anche personalizzare i contenuti e il design delle finestre informative. A tale scopo, devi creare un'implementazione concreta dell'interfaccia di InfoWindowAdapter e chiamare GoogleMap.setInfoWindowAdapter() con la tua implementazione. L'interfaccia contiene due metodi per l'implementazione: getInfoWindow(Marker) e getInfoContents(Marker). L'API chiama prima getInfoWindow(Marker) e, se null viene restituita, chiama getInfoContents(Marker). Se viene restituito anche null, verrà utilizzata la finestra informativa predefinita.

La prima (getInfoWindow()) consente di fornire una visualizzazione che sarà utilizzata per l'intera finestra informativa. La seconda di queste opzioni (getInfoContents()) ti consente di personalizzare i contenuti della finestra, mantenendo comunque il frame e lo sfondo predefiniti della finestra informativa.

Le immagini seguenti mostrano una finestra informativa predefinita, una finestra con contenuti personalizzati e una finestra informativa con sfondo e cornice personalizzate.

Confronto delle finestre informative

Eventi finestra delle informazioni

L'esempio MarkerDemoActivity include un codice di esempio per la registrazione e la gestione degli eventi della finestra informativa.

Puoi utilizzare una OnInfoWindowClickListener per ascoltare gli eventi di clic su una finestra informativa. Per impostare questo listener sulla mappa, chiama GoogleMap.setOnInfoWindowClickListener(OnInfoWindowClickListener). Quando un utente fa clic su una finestra informativa, viene richiamato onInfoWindowClick(Marker) e la finestra informativa viene evidenziata nel colore predefinito di evidenziazione (grigio).

Java


class InfoWindowActivity extends AppCompatActivity implements
    GoogleMap.OnInfoWindowClickListener,
    OnMapReadyCallback {

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

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

      

Kotlin


internal inner class InfoWindowActivity : AppCompatActivity(),
    OnInfoWindowClickListener,
    OnMapReadyCallback {
    override fun onMapReady(googleMap: GoogleMap) {
        // Add markers to the map and do other map setup.
        // ...
        // Set a listener for info window events.
        googleMap.setOnInfoWindowClickListener(this)
    }

    override fun onInfoWindowClick(marker: Marker) {
        Toast.makeText(
            this, "Info window clicked",
            Toast.LENGTH_SHORT
        ).show()
    }
}

      

Analogamente, puoi ascoltare gli eventi di clic lunghi con un OnInfoWindowLongClickListener, che puoi impostare chiamando GoogleMap.setOnInfoWindowCloseListener(OnInfoWindowCloseListener). Questo listener si comporta in modo simile all'ascoltatore dei clic e riceverà una notifica per gli eventi di clic lunghi con callback onInfoWindowClose(Marker).

Per ricevere una notifica alla chiusura della finestra informativa, utilizza una OnInfoWindowCloseListener, che puoi impostare chiamando GoogleMap.setOnInfoWindowCloseListener(OnInfoWindowCloseListener). Riceverai un callback onInfoWindowClose(Marker).

Nota sull'aggiornamento di una finestra informativa: l'evento onInfoWindowClose() viene attivato se l'utente aggiorna una finestra informativa toccando un indicatore che ha già una finestra informativa aperta. Tuttavia, se chiami in modo programmatico Marker.showInfoWindow() in una finestra informativa aperta, l'evento onInfoWindowClose() non viene attivato. Quest'ultimo comportamento si basa sul presupposto che tu sia a conoscenza del fatto che la finestra informativa si chiuderà e riaprirà.

Come menzionato nella sezione precedente sulle finestre informative, una finestra informativa non è una visione in diretta. La visualizzazione viene invece visualizzata come immagine sulla mappa. Di conseguenza, tutti i listener impostati sulla vista vengono ignorati e non possono essere distinti tra gli eventi di clic in varie parti della vista. Ti consigliamo di non posizionare componenti interattivi, come pulsanti, caselle di controllo o input di testo, all'interno della finestra informativa personalizzata.