Okno informacyjne wyświetla tekst lub obrazy w wyskakującym okienku nad mapą. Okna informacyjne są zawsze zakotwiczone do znacznika. Domyślne działanie to wyświetlanie po kliknięciu znacznika.
Przykładowe fragmenty kodu
Repozytorium ApiDemos w GitHubie zawiera próbkę prezentującą wszystkie funkcje okna informacyjnego:
- MarkerDemoActivity – Java: dostosowywanie okien informacyjnych i korzystanie z detektorów okien informacyjnych
- MarkerDemoActivity – Kotlin: dostosowywanie okien informacyjnych i detektorów okien informacyjnych
Wprowadzenie
Okno informacyjne umożliwia wyświetlanie informacji użytkownikowi, który dotknie znacznika. Wyświetlane jest tylko jedno okno informacyjne naraz. Gdy użytkownik kliknie znacznik, obecne okno informacyjne zostanie zamknięte i wyświetlone będzie nowe okno. Jeśli użytkownik kliknie znacznik, który obecnie wyświetla okno informacyjne, okno informacyjne zostanie zamknięte i ponownie otwarte.
Okno informacyjne jest rysowane na ekranie urządzenia i wyśrodkowane nad powiązanym znacznikiem. Domyślne okno informacyjne zawiera tytuł pogrubiony, a (opcjonalnie) fragment kodu poniżej tytułu.
Dodaj okno informacyjne
Najprostszym sposobem dodania okna informacyjnego jest ustawienie metod title()
i snippet()
odpowiedniego znacznika. Ustawienie tych właściwości spowoduje, że po kliknięciu tego znacznika pojawi się okno informacyjne.
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") )
Pokaż/ukryj okno informacyjne
Okna informacyjne są zaprojektowane tak, by reagować na zdarzenia dotyku użytkownika. Jeśli wolisz, możesz automatycznie wyświetlać okno informacyjne, wywołując showInfoWindow()
na znaczniku docelowym. Okno informacyjne można ukryć, wywołując opcję 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()
Możesz też tworzyć okna informacyjne dla poszczególnych klastrów połączonych. Przeczytaj przewodnik dotyczący dodawania okna informacyjnego dla poszczególnych znaczników grupowanych.
Niestandardowe okna informacyjne
Możesz też dostosować zawartość i wygląd okien informacyjnych. Aby to zrobić, musisz utworzyć konkretną implementację interfejsu InfoWindowAdapter
, a potem wywołać GoogleMap.setInfoWindowAdapter()
ze swoją implementacją. Interfejs zawiera 2 metody implementacji: getInfoWindow(Marker)
i getInfoContents(Marker)
. Interfejs API najpierw wywołuje metodę getInfoWindow(Marker)
, a jeśli interfejs null
jest zwracany, wywołuje metodę getInfoContents(Marker)
. Jeśli zwróci też wartość null
, zostanie użyte domyślne okno informacyjne.
Pierwszy z nich (getInfoWindow()
) umożliwia widok, który będzie używany w całym oknie informacyjnym. Druga opcja (getInfoContents()
) umożliwia tylko dostosowanie zawartości okna przy zachowaniu domyślnej ramki i tła okna informacyjnego.
Na poniższych obrazach widać domyślne okno informacyjne, okno informacyjne z dostosowaną treścią oraz okno informacyjne z dostosowaną ramką i tłem.

Zdarzenia w oknie informacyjnym
Przykład żądania MarkerDemoActivity zawiera przykładowy kod służący do rejestrowania zdarzeń w oknie informacyjnym i obsługi ich.
OnInfoWindowClickListener
umożliwia nasłuchiwanie zdarzeń kliknięcia w oknie informacyjnym. Aby ustawić ten odbiornik na mapie, wywołaj GoogleMap.setOnInfoWindowClickListener(OnInfoWindowClickListener)
. Gdy użytkownik kliknie okno informacyjne, zostanie wywołana etykieta onInfoWindowClick(Marker)
, a okno informacyjne zostanie wyróżnione domyślnym kolorem (szarym).
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() } }
Podobnie możesz nasłuchiwać zdarzeń długiego kliknięcia za pomocą elementu OnInfoWindowLongClickListener
, który możesz ustawić, wywołując metodę GoogleMap.setOnInfoWindowCloseListener(OnInfoWindowCloseListener)
.
Ten detektor zachowuje się podobnie do detektora kliknięć i będzie powiadamiany o długich zdarzeniach kliknięcia z wywołaniem zwrotnym onInfoWindowClose(Marker)
.
Aby otrzymać powiadomienie o zamknięciu okna informacyjnego, użyj przycisku OnInfoWindowCloseListener
, który możesz skonfigurować, wywołując opcję GoogleMap.setOnInfoWindowCloseListener(OnInfoWindowCloseListener)
. Otrzymasz wywołanie zwrotne onInfoWindowClose(Marker)
.
Uwaga na temat odświeżania okna informacyjnego: zdarzenie onInfoWindowClose()
jest uruchamiane, gdy użytkownik odświeży okno informacyjne, klikając znacznik, który ma już otwarte okno. Jeśli jednak wywołasz program Marker.showInfoWindow()
w otwartym oknie informacyjnym, zdarzenie onInfoWindowClose()
się nie uruchomi. To drugie działanie jest oparte na założeniu, że okno informacyjne jest zamykane i ponownie otwierane.
Jak wspomnieliśmy w poprzedniej sekcji, w oknach informacyjnych okno informacyjne nie jest podglądem na żywo. Zamiast tego widok jest renderowany jako obraz na mapie. W związku z tym wszelkie detektory ustawione w widoku danych są ignorowane i nie można odróżnić zdarzeń kliknięcia w różnych częściach widoku. Odradzamy umieszczanie komponentów niestandardowych, takich jak przyciski, pola wyboru czy pola tekstowe, w niestandardowym oknie informacyjnym.