Z tego dokumentu dowiesz się, jak skonfigurować mapę dodaną do aplikacji na Androida za pomocą pakietu Maps SDK na Androida.
Przegląd
Po dodaniu mapy do aplikacji możesz skonfigurować jej ustawienia początkowe i środowiska wykonawczego. Ustawienia początkowe należy skonfigurować w zależności od tego, czy
kontener mapy (SupportMapFragment lub
MapView) został dodany statycznie czy dynamicznie. Jeśli kontener mapy został dodany statycznie, możesz skonfigurować początkowe ustawienia mapy w pliku układu.
Jeśli został dodany dynamicznie, możesz skonfigurować ustawienia początkowe w
OnCreate wywołaniu zwrotnym za pomocą GoogleMapOptions
obiektu.
Więcej informacji o dodawaniu kontenera mapy znajdziesz w artykule Dodawanie mapy.
Początkowe ustawienia mapy obejmują:
- pozycję kamery, w tym lokalizację, powiększenie, kierunek i nachylenie; szczegółowe informacje o ustawianiu pozycji kamery znajdziesz w artykule Kamera i widok;
- Typ mapy.
- elementy interfejsu do wyświetlenia, takie jak przyciski powiększenia i kompas;
- Gesty do włączenia.
- informacje o tym, czy włączona jest wersja uproszczona.
W środowisku wykonawczym możesz skonfigurować te ustawienia i niektóre dodatkowe ustawienia, aktualizując obiekt GoogleMap w wywołaniu zwrotnym onMapReady. Dodatkowe ustawienia są konfigurowane za pomocą metod klasy
GoogleMap, takich jak te, które konfigurują
warstwę natężenia ruchu i dopełnienie mapy.
Przykład
W przykładowym kodzie poniżej i na zrzucie ekranu powyżej mapa jest skonfigurowana z tymi ustawieniami.
Ustawienia początkowe są skonfigurowane w pliku układu layout file:
- Włącz elementy sterujące powiększeniem.
- Włącz elementy sterujące gestami obrotu.
- Ustaw nachylenie mapy na 30.
Ustawienia środowiska wykonawczego:
- Wyśrodkuj kamerę na Kioto w Japonii.
- Włącz typ mapy hybrydowej.
- Włącz warstwę natężenia ruchu.
Ustawienia początkowe
<?xml version="1.0" encoding="utf-8"?> <fragment xmlns:android="http://schemas.android.com/apk/res/android" xmlns:map="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:name="com.google.android.gms.maps.SupportMapFragment" android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" map:uiZoomControls="true" map:uiRotateGestures="true" map:cameraTilt="30" />
Ustawienia środowiska wykonawczego
package com.example.mapsetup; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; public class MainActivity extends AppCompatActivity implements OnMapReadyCallback { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } // Update the map configuration at runtime. @Override public void onMapReady(GoogleMap googleMap) { // Set the map coordinates to Kyoto Japan. LatLng kyoto = new LatLng(35.00116, 135.7681); // Set the map type to Hybrid. googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); // Add a marker on the map coordinates. googleMap.addMarker(new MarkerOptions() .position(kyoto) .title("Kyoto")); // Move the camera to the map coordinates and zoom in closer. googleMap.moveCamera(CameraUpdateFactory.newLatLng(kyoto)); googleMap.moveCamera(CameraUpdateFactory.zoomTo(15)); // Display traffic. googleMap.setTrafficEnabled(true); } }
Zanim zaczniesz
Zanim zaczniesz, możesz skonfigurować projekt i dodać podstawową mapę, korzystając z tych opcji:
Utwórz aplikację za pomocą szablonu Mapy w Android Studio. Szablon Mapy automatycznie konfiguruje projekt i dodaje podstawową mapę. Jako kontener mapy używany jest fragment, który jest dodawany statycznie. Więcej informacji znajdziesz w przewodniku dla początkujących.
Ręcznie skonfiguruj projekt pod kątem pakietu SDK i dodaj podstawową mapę. Dzięki temu możesz użyć dowolnego szablonu Androida i dodać mapę do istniejącej aplikacji.
Konfigurowanie mapy po dodaniu jej statycznie
W tej sekcji opisujemy, jak ustawić stan początkowy mapy, jeśli została ona dodana statycznie do pliku układu.
Pakiet Maps SDK na Androida definiuje zestaw niestandardowych atrybutów XML dla elementu
SupportMapFragment lub MapView, których możesz użyć do skonfigurowania stanu początkowego
mapy bezpośrednio z pliku układu. Zdefiniowane są te atrybuty:
mapType– typ mapy do wyświetlenia. Prawidłowe wartości to:none,normal,hybrid,satelliteiterrain.cameraTargetLat,cameraTargetLng,cameraZoom,cameraBearing,cameraTilt– początkowa pozycja kamery. Więcej informacji znajdziesz w przewodniku dotyczącym kamery i widoków.uiZoomControls,uiCompass– określa, czy wyświetlane są elementy sterujące powiększeniem i kompas. Więcej informacji znajdziesz w artykuleUiSettings.uiZoomGestures,uiScrollGestures,uiRotateGestures,uiTiltGestures– określa, czy włączone są określone gesty. Więcej informacji znajdziesz w artykuleUiSettings.zOrderOnTop– wskazuje, czy powierzchnia widoku mapy jest wyświetlana nad oknem mapy, elementami sterującymi mapą i dowolnym obiektem w oknie. Więcej informacji znajdziesz w artykule SurfaceView.setZOrderOnTop(boolean).useViewLifecycle– prawidłowe tylko w przypadku obiektuSupportMapFragment. Określa, czy cykl życia mapy ma być powiązany z widokiem fragmentu czy z samym fragmentem. Więcej informacji znajdziesz w dokumentacji.liteMode–true, aby włączyć wersję uproszczoną, w przeciwnym raziefalse.mapColorScheme– określa schemat kolorów mapy normalnej i terenu. Dostępne wartości tolight(domyślna),darkifollow_system, co oznacza, że używane jest bieżące ustawienie systemowe na podstawie ustawienia urządzenia dlaUI_NIGHT_MODE_MASK. Więcej informacji znajdziesz w artykule Schemat kolorów mapy.
Aby używać tych atrybutów niestandardowych w pliku układu, musi on zawierać tę deklarację przestrzeni nazw. Możesz wybrać dowolną przestrzeń nazw, nie musi to być map:
xmlns:map="http://schemas.android.com/apk/res-auto"
Następnie możesz dodać atrybuty z prefiksem map: do pliku układu.
Ten plik układu konfiguruje obiekt SupportMapFragment z niestandardowymi atrybutami mapy. Te same atrybuty można zastosować również do obiektu MapView.
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
map:cameraBearing="112.5"
map:cameraTargetLat="-33.796923"
map:cameraTargetLng="150.922433"
map:cameraTilt="30"
map:cameraZoom="13"
map:mapType="normal"
map:mapColorScheme="dark"
map:uiCompass="false"
map:uiRotateGestures="true"
map:uiScrollGestures="false"
map:uiTiltGestures="true"
map:uiZoomControls="false"
map:uiZoomGestures="true"/>
Konfigurowanie mapy po dodaniu jej dynamicznie
W tej sekcji opisujemy, jak ustawić stan początkowy mapy, jeśli została ona dodana do aplikacji dynamicznie.
Jeśli dodasz SupportMapFragment lub MapView dynamicznie, możesz ustawić stan początkowy mapy w obiekcie GoogleMapOptions. Dostępne opcje są takie same jak w pliku układu.
Obiekt GoogleMapOptions możesz utworzyć w ten sposób:
Kotlin
val options = GoogleMapOptions()
Java
GoogleMapOptions options = new GoogleMapOptions();
Następnie skonfiguruj go w ten sposób:
Kotlin
options.mapType(GoogleMap.MAP_TYPE_SATELLITE) .compassEnabled(false) .rotateGesturesEnabled(false) .tiltGesturesEnabled(false)
Java
options.mapType(GoogleMap.MAP_TYPE_SATELLITE) .compassEnabled(false) .rotateGesturesEnabled(false) .tiltGesturesEnabled(false);
Aby zastosować te opcje podczas tworzenia mapy, wykonaj jedną z tych czynności:
- Jeśli używasz
SupportMapFragment, użyjSupportMapFragment.newInstance(GoogleMapOptions options)statycznej metody fabrycznej, aby utworzyć fragment i przekazać ustawienia. - Jeśli używasz
MapView, użyj konstruktoraMapView(Context, GoogleMapOptions)i przekaż ustawienia.
Lokalizowanie mapy
Gdy dodasz do aplikacji MapView lub SupportMapFragment, elementy tekstowe na mapie będą wyświetlane w odpowiednim języku na podstawie ustawień urządzenia i lokalizacji użytkownika. Możesz ograniczyć języki używane przez aplikację do podzbioru wszystkich obsługiwanych języków, dodając element resConfigs do pliku Gradle. Jest to przydatne do usuwania nieużywanych języków, a także zmniejsza rozmiar pliku binarnego aplikacji. Przykład:
defaultConfig {
resConfigs "en", "fr", "es", "zh", "de", "ja", "ru", "ko", "pt", "in"
}
Więcej informacji o lokalizowaniu aplikacji na Androida.
Konfigurowanie warstwy natężenia ruchu
Możesz wyświetlać dane o natężeniu ruchu na mapie, włączając warstwę natężenia ruchu. Warstwę natężenia ruchu możesz
włączać i wyłączać, wywołując metodę
setTrafficEnabled()
, a także sprawdzać, czy jest włączona, wywołując metodę
isTrafficEnabled(). Na zrzucie ekranu poniżej widać mapę z włączoną warstwą natężenia ruchu.
Konfigurowanie warstwy transportu publicznego
Możesz wyświetlać dane o transporcie publicznym na mapie, włączając warstwę transportu publicznego. Warstwę transportu publicznego możesz
włączać i wyłączać, wywołując metodę
setTransitEnabled()
, a także sprawdzać, czy jest włączona, wywołując metodę
isTransitEnabled(). Na zrzucie ekranu poniżej widać mapę z włączoną warstwą transportu publicznego.
Ustawianie typu mapy
Aby ustawić typ mapy, wywołaj metodę setMapType.
Aby na przykład wyświetlić mapę satelitarną:
Kotlin
// Sets the map type to be "hybrid" map.setMapType(GoogleMap.MAP_TYPE_HYBRID) map.setIndoorEnabled(true) val isIndoor = map.isIndoorEnabled()
Java
// Sets the map type to be "hybrid" map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
Na ilustracji poniżej porównano typy mapy normalnej, hybrydowej i terenu:
Konfigurowanie budynków 3D
Wiele miast, gdy są oglądane z bliska, ma widoczne budynki 3D, jak widać na zdjęciu Vancouver w Kanadzie poniżej. Możesz wyłączyć budynki 3D, wywołując
calling
GoogleMap.setBuildingsEnabled(false).
Konfigurowanie ustawień mapy obiektów
Przy wysokich poziomach powiększenia mapa pokazuje plany pięter przestrzeni wewnętrznych, takich jak lotniska, centra handlowe, duże sklepy i stacje transportu publicznego. Te plany pięter, zwane mapami obiektów, są wyświetlane w przypadku typów mapy „normalna”
i „satelitarna” (GoogleMap.MAP_TYPE_NORMAL i
GoogleMap.MAP_TYPE_SATELLITE). Są one automatycznie włączane, gdy użytkownik
powiększa mapę, i znikają, gdy mapa jest pomniejszana.
Informacja o wycofaniu: w przyszłej wersji mapy obiektów
będą dostępne tylko w przypadku typu mapy normal. W przyszłej wersji mapy obiektów nie będą obsługiwane w przypadku map satellite,
terrain ani hybrid. Nawet jeśli mapy obiektów nie są
obsługiwane, isIndoorEnabled() będzie nadal zwracać wartość
ustawioną za pomocą setIndoorEnabled(), tak jak teraz. Domyślnie setIndoorEnabled ma wartość true. Informacje o tym, kiedy obsługa map obiektów stanie się niedostępna w przypadku tych typów map, znajdziesz w informacjach o wersji.
Oto podsumowanie funkcji map obiektów w interfejsie API:
- Możesz wyłączyć mapy obiektów, wywołując
GoogleMap.setIndoorEnabled(false). Domyślnie mapy obiektów są włączone. Mapy obiektów są wyświetlane na jednej mapie naraz. Domyślnie jest to pierwsza mapa dodana do aplikacji. Aby wyświetlać mapy obiektów na innej mapie, wyłącz je na pierwszej mapie, a następnie wywołajsetIndoorEnabled(true)na drugiej mapie. - Aby wyłączyć domyślny selektor poziomów (selektor pięter), wywołaj
GoogleMap.getUiSettings().setIndoorLevelPickerEnabled(false). Więcej informacji znajdziesz w artykule Interakcja z mapą. OnIndoorStateChangeListener– definiuje detektory, które wykrywają, kiedy budynek jest w centrum uwagi lub gdy w budynku jest aktywowany poziom. Więcej informacji znajdziesz w artykule Interakcja z mapą.getFocusedBuilding– pobiera budynek, który jest w centrum uwagi. Następnie możesz znaleźć aktywny poziom, wywołującIndoorBuilding.getActiveLevelIndex().- Stylizowanie mapy podstawowej nie ma wpływu na mapy obiektów.
Konfigurowanie dopełnienia mapy
Ten film przedstawia przykład dopełnienia mapy.
Mapa Google jest zaprojektowana tak, aby wypełniać cały obszar zdefiniowany przez element kontenera, zwykle MapView lub SupportMapFragment. Wymiary kontenera określają kilka aspektów wyglądu i działania mapy:
- Cel kamery będzie odzwierciedlać środek obszaru z dopełnieniem.
- Elementy sterujące mapą są umieszczone względem krawędzi mapy.
- Informacje prawne, takie jak oświadczenia o prawach autorskich lub logo Google, pojawiają się wzdłuż dolnej krawędzi mapy.
Możesz dodać dopełnienie wokół krawędzi mapy za pomocą metody GoogleMap.setPadding(). Mapa będzie nadal wypełniać cały kontener, ale tekst i położenie elementów sterujących, gesty na mapie i ruchy kamery będą się zachowywać tak, jakby mapa została umieszczona w mniejszej przestrzeni. Spowoduje to te zmiany:
- Ruchy kamery za pomocą wywołań interfejsu API lub naciśnięć przycisków (np. kompasu, mojej lokalizacji, przycisków powiększenia) są względne w stosunku do obszaru z dopełnieniem.
- Metoda
getCameraPositionzwraca środek obszaru z dopełnieniem. - Metody
ProjectionigetVisibleRegionzwracają obszar z dopełnieniem. - Elementy sterujące interfejsu są przesunięte od krawędzi kontenera o określoną liczbę pikseli.
Dopełnienie może być przydatne podczas projektowania interfejsów, które nakładają się na część mapy. Na ilustracji poniżej mapa ma dopełnienie wzdłuż górnej i prawej krawędzi. Widoczne elementy sterujące mapą i tekst prawny będą wyświetlane wzdłuż krawędzi obszaru z dopełnieniem (na zielono), a mapa będzie nadal wypełniać cały kontener (na niebiesko). W tym przykładzie możesz umieścić menu po prawej stronie mapy bez zasłaniania elementów sterujących mapą.

Schemat kolorów mapy
W przypadku map typu normalna i teren możesz dynamicznie ustawić schemat kolorów mapy na ciemny, jasny lub użyć bieżącego ustawienia systemowego. Możesz na przykład przyciemnić lub rozjaśnić schemat kolorów mapy w zależności od pory dnia lub tego, czy urządzenie jest używane w pomieszczeniu czy na zewnątrz.
Domyślnie mapa używa trybu jasnego. Bieżąca wartość ustawienia systemowego jest oparta na ustawieniu urządzenia dla UI_NIGHT_MODE_MASK.
Kotlin
mapFragment = SupportMapFragment.newInstance(GoogleMapOptions().mapColorScheme(MapColorScheme.DARK).mapId(mapId2))
Java
mapFragment = SupportMapFragment.newInstance(new GoogleMapOptions().mapColorScheme(MapColorScheme.DARK).mapId(mapId2));
Możesz przełączać schemat kolorów za pomocą metody
GoogleMap.setMapColorScheme(), aby ustawić bieżący styl na tryb ciemny, tryb jasny lub ustawienia
systemowe.
Kotlin
googleMap.setMapColorScheme(MapColorScheme.DARK) googleMap.setMapColorScheme(MapColorScheme.LIGHT) googleMap.setMapColorScheme(MapColorScheme.FOLLOW_SYSTEM)
Java
googleMap.setMapColorScheme(MapColorScheme.DARK); googleMap.setMapColorScheme(MapColorScheme.LIGHT); googleMap.setMapColorScheme(MapColorScheme.FOLLOW_SYSTEM);
Aby utworzyć niestandardowe style jasne i ciemne dla map, użyj definiowania stylów map w Google Cloud.
Konfigurowanie koloru tła
Podczas pracy w trybie ciemnym lub przełączania się między widokami mapy może być przydatne skonfigurowanie domyślnego koloru tła mapy. Możesz to zrobić, ustawiając właściwość backgroundColor opcji mapy.
Kotlin
private val googleMapOptions: GoogleMapOptions = GoogleMapOptions().backgroundColor(Color.argb(255, 255, 0, 0));
Java
private GoogleMapOptions options = new GoogleMapOptions().backgroundColor(Color.argb(255, 255, 0, 0));
Do skonfigurowania koloru tła możesz też użyć definiowania stylów map w Google Cloud. Kolor tła ustawiony w stylach map ma wyższy priorytet niż lokalny kolor tła. Więcej informacji znajdziesz w artykule Zmienianie koloru tła aplikacji w przypadku definiowania stylów map w Google Cloud.