W tym temacie opisano konfigurowanie mapy dodanej do aplikacji na Androida za pomocą pakietu Maps SDK na Androida.
Omówienie
Po dodaniu mapy do aplikacji możesz skonfigurować jej ustawienia początkowe i ustawienia czasu wykonywania. Ustawienia początkowe należy skonfigurować w zależności od tego, czy kontener mapy (SupportMapFragment
czy MapView
) został dodany w sposób statyczny czy dynamiczny. Jeśli kontener mapy został
dodane statycznie, można skonfigurować początkowe ustawienia mapy w pliku układu.
Jeśli została dodana dynamicznie, możesz skonfigurować ustawienia początkowe w
OnCreate
wywołanie zwrotne z GoogleMapOptions
obiektu.
Szczegółowe informacje o dodawaniu kontenera mapy znajdziesz w artykule Dodawanie mapy.
Początkowe ustawienia mapy obejmują następujące elementy:
- Położenie kamery, w tym lokalizacja, powiększenie, położenie i nachylenie. Szczegółowe informacje na temat pozycjonowania kamery znajdziesz w sekcji Aparat i widok.
- Typ mapy.
- komponenty interfejsu do wyświetlenia, np. powiększenie; i kompas.
- Gesty, które chcesz włączyć.
- Czy włączona jest wersja uproszczona.
Te ustawienia oraz niektóre ustawienia dodatkowe można skonfigurować w czasie działania
aktualizowanie obiektu GoogleMap
w onMapReady
oddzwanianie. Dodatkowe ustawienia są konfigurowane za pomocą metod klasy GoogleMap
, takich jak te, które konfigurują warstwę ruchu i wypełnienie mapy.
Przykład
W przykładowym kodzie poniżej i na zrzutie ekranu powyżej mapa jest został skonfigurowany z następującymi ustawieniami.
Początkowe ustawienia są konfigurowane w pliku układu:
- Włącz kontrolę powiększenia.
- Włącz sterowanie gestami obracania.
- Ustaw pochylenie mapy na 30.
Ustawienia środowiska wykonawczego:
- Umieść aparat w centrum Kioto w Japonii.
- Włącz mapę hybrydową.
- 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 czasu działania
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 Map w Android Studio. Szablon Mapy automatycznie konfiguruje projekt i dodaje podstawową mapę. Fragment jest używany jako kontener mapy i jest dodawany statycznie. Więcej informacji: krótkie wprowadzenie.
Ręcznie skonfiguruj projekt pod kątem pakietu SDK i dodaj podstawową mapę. Pozwala to użyć dowolnego szablonu Androida mapować na istniejącą aplikację.
Konfigurowanie mapy po dodaniu jej statycznej
W tej sekcji opisano, jak ustawić początkowy stan mapy, jeśli została ona dodana do pliku układu w sposób statyczny.
Pakiet SDK Maps SDK na Androida definiuje zestaw niestandardowych atrybutów XML dla atrybutu
SupportMapFragment
lub MapView
, których możesz użyć do skonfigurowania początkowego
bezpośrednio z pliku układu. Obecnie zdefiniowane są te atrybuty:
mapType
– typ mapy do wyświetlenia. Dozwolone wartości tonone
,normal
,hybrid
,satellite
iterrain
.cameraTargetLat
,cameraTargetLng
,cameraZoom
,cameraBearing
,cameraTilt
– początkowe położenie kamery. Szczegółowe informacje znajdziesz w przewodniku Kamera i widoki.uiZoomControls
,uiCompass
– określa, czy elementy sterujące powiększeniem i kompas są wyświetlane. Więcej informacji:UiSettings
.uiZoomGestures
,uiScrollGestures
,uiRotateGestures
,uiTiltGestures
– Określa, czy włączone są określone gesty. ZobaczUiSettings
, aby uzyskać więcej informacji.zOrderOnTop
– wskazuje, czy powierzchnia widoku mapy jest wyświetlana na nad oknem mapy, elementy sterujące mapą i dowolny obiekt w oknie. Więcej informacji znajdziesz w metodie SurfaceView.setZOrderOnTop(boolean).useViewLifecycle
– prawidłowy tylko w przypadku obiektuSupportMapFragment
. Określa czy cykl życia mapy powinien być powiązany z widokiem fragmentu czy z widokiem fragment tekstu. Szczegółowe informacje znajdziesz tutaj.liteMode
–true
, aby włączyć wersję uproszczoną; w przeciwnym raziefalse
.mapColorScheme
– określa schemat kolorów mapy normalnej i mapy terenu. Dostępne wartości tolight
(domyślnie),dark
ifollow_system
, co oznacza użycie bieżącego ustawienia systemu na podstawie ustawienia urządzenia dlaUI_NIGHT_MODE_MASK
. Więcej informacji znajdziesz w artykule Schemat kolorów mapy.
Aby móc używać tych atrybutów niestandardowych w pliku układu, musisz umieścić w nim tę deklarację przestrzeni nazw. Możesz wybrać dowolną przestrzeń nazw,
nie musi być typu map
:
xmlns:map="http://schemas.android.com/apk/res-auto"
Następnie możesz dodać atrybuty z preiksem map:
do pliku układu.
Podany poniżej plik układu konfiguruje obiekt SupportMapFragment
za pomocą niestandardowych atrybutów mapy. Te same atrybuty można też zastosować 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 dynamicznym dodaniu
Z tej sekcji dowiesz się, jak ustawić początkowy stan mapy, jeśli została ona dodana do aplikacji dynamicznie.
Jeśli SupportMapFragment
lub MapView
został dodany dynamicznie, możesz
ustawić początkowy stan mapy w obiekcie GoogleMapOptions
.
to te same opcje, które są dostępne w pliku układu.
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 parametru
SupportMapFragment
,SupportMapFragment.newInstance(GoogleMapOptions options)
statycznej metody fabryki, by utworzyć fragment i przekazać go w ustawieniach. - Jeśli używasz obiektu
MapView
, użyj konstruktoraMapView(Context, GoogleMapOptions)
i przekaż ustawienia.
Lokalizacja mapy
Gdy dodasz do aplikacji MapView
lub SupportMapFragment
, elementy tekstowe
są wyświetlane na mapie w odpowiednim języku w zależności od urządzenia użytkownika
ustawienia i lokalizację. Języki używane w aplikacji możesz ograniczyć do
podzbiór wszystkich obsługiwanych języków, dodając element resConfigs
do Gradle.
. Pomaga to wyciąć nieużywane języki. Zmniejsza to także
rozmiar pliku binarnego aplikacji. Na przykład:
defaultConfig {
resConfigs "en", "fr", "es", "zh", "de", "ja", "ru", "ko", "pt", "in"
}
Dowiedz się więcej o lokalizowaniu aplikacji na Androida.
Konfigurowanie warstwy natężenia ruchu
Możesz wyświetlać dane o ruchu na mapie, włączając warstwę ruchu. Możesz włączać i wyłączać warstwę ruchu, wywołując metodę setTrafficEnabled()
. Możesz też sprawdzić, czy warstwa ruchu jest obecnie włączona, wywołując metodę isTrafficEnabled()
. Na poniższym zrzucie ekranu widać mapę z włączoną warstwą ruchu.
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.mapType = GoogleMap.MAP_TYPE_HYBRID
Java
// Sets the map type to be "hybrid" map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
Na tym obrazku porównano mapy normalną, hybrydową i terenową:
Konfigurowanie budynków 3D
W wielu miastach przy oglądaniu z bliska będą widoczne budynki 3D,
na poniższym zdjęciu Vancouver w Kanadzie. Możesz wyłączyć budynki 3D, wywołując funkcję GoogleMap.setBuildingsEnabled(false)
.
Konfigurowanie ustawień mapy wewnętrznej
Przy dużym powiększeniu mapa wyświetla plany pięter pomieszczeń wewnętrznych, takich jak lotniska, centra handlowe, duże sklepy detaliczne i stacje tranzytowe. Te plany pięter, zwane mapami wewnętrznymi, są wyświetlane w mapach typu „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 mapę pomniejsza.
Ostrzeżenie o wycofaniu: w przyszłej wersji mapy wewnątrz budynków będą dostępne tylko w przypadku typu mapy normal
. W przyszłej wersji mapy wewnątrz budynków nie będą obsługiwane na mapach satellite
, terrain
ani hybrid
. Nawet jeśli wewnątrz budynku nie jest
jest obsługiwany, isIndoorEnabled()
nadal będzie zwracać wartość
, który został ustawiony w setIndoorEnabled()
, tak jak ma to miejsce obecnie. Według
domyślna wartość w kolumnie setIndoorEnabled
to true
. Uwagi do wersji będą informować o tym, kiedy obsługa wewnątrz budynków stanie się niedostępna na tych typach map.
Oto podsumowanie funkcji map obiektów w interfejsie API:
- Możesz wyłączyć mapy obiektów, dzwoniąc
GoogleMap.setIndoorEnabled(false)
Domyślnie mapy obiektów są włączone. Mapy wewnątrz budynków są wyświetlane na jednej mapie naraz. Domyślnie jest to pierwsza mapa dodana do Twojej aplikacji. Do wyświetlać mapy obiektów na innej mapie, wyłączyć je na pierwszej mapie, wywołajsetIndoorEnabled(true)
na drugiej mapie. - Aby wyłączyć domyślny selektor poziomu (selektor pięter), wywołaj
GoogleMap.getUiSettings().setIndoorLevelPickerEnabled(false)
Więcej informacji znajdziesz w sekcji Korzystanie z mapy. OnIndoorStateChangeListener
– określa detektory, które: które wykrywają ostrość obiektu lub aktywowanie poziomu. w budynku. Więcej informacji znajdziesz w artykule Interakcje z mapą.getFocusedBuilding
– pobiera dane budynku, na którym jest nacisk. Aby znaleźć aktywny poziom, wywołaj funkcjęIndoorBuilding.getActiveLevelIndex()
.- Styl mapy podstawowej nie ma wpływu na mapy obiektów.
Konfigurowanie dopełnienia mapy
W tym filmie pokazujemy przykład dopełnienia mapy.
Mapa Google ma wypełniać cały region zdefiniowany przez element kontenera, zwykle MapView
lub SupportMapFragment
. Niektóre aspekty wyglądu i działania mapy są zdefiniowane przez wymiary jej kontenera:
- Cel kamery będzie odnosić się do środka wyściełanego obszaru.
- Opcje mapy są umieszczane względem krawędzi mapy.
- Pojawią się informacje prawne, takie jak oświadczenia dotyczące praw autorskich lub logo Google. wzdłuż dolnej krawędzi mapy.
Możesz dodać dopełnienie wokół krawędzi mapy za pomocą
GoogleMap
setPadding()
. Mapa
aby wypełnić cały kontener, ale tekst i elementy sterujące pozycjonowaniem, mapą
gesty i ruchy kamery będą działać tak, jakby urządzenie zostało umieszczone
o mniejszej przestrzeni. Wprowadziliśmy następujące zmiany:
- Ruchy kamery wywoływane przez wywołania interfejsu API lub naciśnięcia przycisków (np. kompasu, mojej lokalizacji czy przycisków powiększania) są względne względem obszaru z dodatkiem.
- Metoda
getCameraPosition
zwraca środek obszaru z wypełnieniem. - Metody
Projection
igetVisibleRegion
zwracają region z dopełnieniem. - Elementy sterujące interfejsu są przesunięte od krawędzi kontenera o wyznaczoną liczbę pikseli.
Odstęp może być przydatny podczas projektowania interfejsów, które zachodzą na część mapy. Na poniższej ilustracji mapa jest wyściełana u góry i wzdłuż krawędzie po prawej stronie. Elementy sterujące widocznej mapy i tekst prawny będą wyświetlane na obrzeżach obszaru z dodatkowym marginesem (zaznaczone na zielono), a mapa będzie wypełniać cały kontener (zaznaczony na niebiesko). W tym przykładzie możesz użyć funkcji pływającej z prawej strony mapy bez zasłaniania elementów sterujących mapy.
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 używania urządzenia w pomieszczeniu lub na zewnątrz.
Domyślnie mapa używa trybu jasnego. Obecna wartość ustawienia systemu zależy od
w ustawieniu urządzenia 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));
Schemat kolorów możesz przełączać za pomocą
GoogleMap.setMapColorScheme()
aby ustawić bieżący styl na tryb ciemny lub jasny lub zgodnie z systemem
ustawieniach.
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);
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. Aby to zrobić, ustaw parametr
opcje mapy: backgroundColor
.
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 konfigurowania koloru tła możesz też użyć stylów map w Google Cloud. Kolor tła ustawiony w stylizacji map ma wyższy priorytet niż lokalny kolor tła. Więcej informacji znajdziesz w artykule Zmienianie tła aplikacji color definiowanie stylów map w chmurze.