Questo argomento descrive come configurare una mappa che è stata aggiunta a un'app per Android utilizzando l'SDK Maps per Android.
Panoramica
Dopo aver aggiunto una mappa alla tua app, puoi configurare le impostazioni iniziali e di runtime della mappa. Le impostazioni iniziali devono essere configurate in base al fatto che tu abbia aggiunto il contenitore della mappa (
SupportMapFragment
o MapView
) in modo statico o dinamico. Se il contenitore della mappa è stato aggiunto in modo statico, puoi configurare le impostazioni iniziali della mappa nel file di layout.
Se è stato aggiunto in modo dinamico, puoi configurare le impostazioni iniziali nel callback OnCreate
con un oggetto GoogleMapOptions
.
Per informazioni dettagliate sull'aggiunta di un contenitore della mappa, consulta la sezione Aggiungere una mappa.
Le impostazioni iniziali della mappa includono:
- La posizione della fotocamera, inclusa la posizione, lo zoom, il rilevamento e l'inclinazione. Consulta la sezione Videocamera e vista per informazioni dettagliate sul posizionamento della videocamera.
- Il tipo di mappa.
- I componenti dell'interfaccia utente da visualizzare, come i pulsanti di zoom e la bussola.
- I gesti da attivare.
- Indica se la modalità Lite è attiva.
In fase di esecuzione, puoi configurare queste e alcune impostazioni di aggiunta, aggiornando l'oggetto GoogleMap
nel callback onMapReady
. Le impostazioni aggiuntive vengono configurate tramite i metodi della classe GoogleMap
, come quelle che configurano il livello di traffico e la riempimento della mappa.
Esempio
Nel codice di esempio riportato di seguito e nello screenshot in alto, la mappa è configurata con le seguenti impostazioni.
Le impostazioni iniziali vengono configurate nel file di layout:
- Attiva i controlli dello zoom.
- Attiva i controlli di rotazione dei gesti.
- Imposta l'inclinazione della mappa su 30.
Le impostazioni di runtime:
- Centra la fotocamera su Kyoto in Giappone.
- Attiva il tipo di mappa ibrida.
- Attiva il livello traffico.
Impostazioni iniziali
<?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" />
Impostazioni di runtime
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); } }
Prima di iniziare
Prima di iniziare, puoi configurare un progetto e aggiungere una mappa di base tramite le seguenti opzioni:
Crea un'app utilizzando il modello di Maps per Android Studio. Il modello di Maps configura automaticamente il progetto e aggiunge una mappa di base. Un frammento viene utilizzato come contenitore della mappa e viene aggiunto in modo statico. Per maggiori dettagli, consulta la guida rapida.
Configura il tuo progetto per l'SDK manualmente e aggiungi una mappa di base. In questo modo puoi usare qualsiasi modello Android e aggiungere una mappa a un'app esistente.
Configurare una mappa dopo averla aggiunta in modo statico
Questa sezione descrive come impostare lo stato iniziale della mappa se l'hai aggiunta in modo statico al file di layout.
L'SDK Maps per Android definisce un insieme di attributi XML personalizzati per un elemento SupportMapFragment
o MapView
che puoi utilizzare per configurare lo stato iniziale della mappa direttamente dal file di layout. Attualmente sono definiti i seguenti attributi:
mapType
: il tipo di mappa da visualizzare. I valori validi includono:none
,normal
,hybrid
,satellite
eterrain
.cameraTargetLat
,cameraTargetLng
,cameraZoom
,cameraBearing
,cameraTilt
: la posizione iniziale della fotocamera. Consulta la guida videocamera e viste per i dettagli.uiZoomControls
,uiCompass
: specifica se vengono visualizzati i controlli di zoom e la bussola. Per dettagli, visita la paginaUiSettings
.uiZoomGestures
,uiScrollGestures
,uiRotateGestures
,uiTiltGestures
: specifica se sono abilitati gesti specifici. Per i dettagli, consultaUiSettings
.zOrderOnTop
: indica se la superficie della visualizzazione mappa viene visualizzata nella parte superiore della finestra della mappa, nei controlli della mappa e in qualsiasi oggetto nella finestra. Consulta SurfaceView.setZOrderOnTop(boolean) per maggiori dettagli.useViewLifecycle
: valido solo con un oggettoSupportMapFragment
. Specifica se il ciclo di vita della mappa deve essere associato alla vista del frammento o al frammento stesso. Vedi qui per i dettagli.liteMode
—true
per attivare la modalità Lite; in caso contrario,false
.
Per utilizzare questi attributi personalizzati all'interno del file di layout, deve includere la seguente dichiarazione dello spazio dei nomi. Puoi scegliere qualsiasi spazio dei nomi, non deve essere map
:
xmlns:map="http://schemas.android.com/apk/res-auto"
Puoi quindi aggiungere gli attributi con un prefisso map:
nel file di layout.
Il seguente file di layout configura un oggetto SupportMapFragment
con attributi mappa personalizzati. Gli stessi attributi possono essere applicati anche a un oggetto 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:uiCompass="false"
map:uiRotateGestures="true"
map:uiScrollGestures="false"
map:uiTiltGestures="true"
map:uiZoomControls="false"
map:uiZoomGestures="true"/>
Configurare una mappa dopo averla aggiunta in modo dinamico
Questa sezione descrive come impostare lo stato iniziale della mappa se l'hai aggiunta dinamicamente all'app.
Se hai aggiunto SupportMapFragment
o MapView
in modo dinamico, puoi impostare lo stato iniziale della mappa in un oggetto GoogleMapOptions
. Le opzioni disponibili sono le stesse disponibili nel file di layout.
Puoi creare un GoogleMapOptions
come segue:
Java
GoogleMapOptions options = new GoogleMapOptions();
Kotlin
val options = GoogleMapOptions()
Quindi, configuralo nel seguente modo:
Java
options.mapType(GoogleMap.MAP_TYPE_SATELLITE) .compassEnabled(false) .rotateGesturesEnabled(false) .tiltGesturesEnabled(false);
Kotlin
options.mapType(GoogleMap.MAP_TYPE_SATELLITE) .compassEnabled(false) .rotateGesturesEnabled(false) .tiltGesturesEnabled(false)
Per applicare queste opzioni durante la creazione di una mappa, esegui una delle seguenti operazioni:
- Se usi un
SupportMapFragment
, utilizza il metodo di fabbrica staticoSupportMapFragment.newInstance(GoogleMapOptions options)
per costruire il frammento e trasferire le tue impostazioni. - Se utilizzi un
MapView
, utilizza il costruttoreMapView(Context, GoogleMapOptions)
e trasmetti le tue impostazioni.
Imposta il livello di traffico
Puoi visualizzare i dati sul traffico sulla mappa attivando il livello traffico. Puoi attivare e disattivare il livello di traffico chiamando il metodo setTrafficEnabled()
e determinare se il livello di traffico è attualmente attivo chiamando il metodo isTrafficEnabled()
. Il seguente screenshot mostra una mappa con il livello di traffico attivato.
Impostare il tipo di mappa
Per impostare il tipo di mappa, chiama il metodo setMapType
.
Ad esempio, per visualizzare una mappa satellitare:
Java
// Sets the map type to be "hybrid" map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
Kotlin
// Sets the map type to be "hybrid" map.mapType = GoogleMap.MAP_TYPE_HYBRID
La seguente immagine mette a confronto i tipi di mappe normali, ibride e con rilievo:

Configurare edifici 3D
Molte città, se osservate da vicino, hanno edifici 3D visibili, come si vede dall'immagine di seguito di Vancouver, Canada. Puoi disattivare gli edifici 3D
chiamando
GoogleMap.setBuildingsEnabled(false)
.

Configura le impostazioni della mappa di interni
Con livelli di zoom elevati, la mappa mostra le planimetrie di spazi interni come aeroporti, centri commerciali, grandi negozi e stazioni di transito. Le planimetrie, chiamate mappe di interni, vengono visualizzate per i tipi di mappa "normali" e "satellitari" (GoogleMap.MAP_TYPE_NORMAL
e GoogleMap.MAP_TYPE_SATELLITE
). Vengono attivate automaticamente quando l'utente aumenta lo zoom e scompaiono quando la mappa viene ridotta.
Avviso relativo al ritiro: in una release futura, le mappe di interni saranno disponibili solo per il tipo di mappa normal
. A partire da questa release futura, le mappe di interni non saranno più supportate su satellite
, terrain
o hybrid
. Anche se non è supportata in ambienti interni, isIndoorEnabled()
continuerà a restituire il valore impostato tramite setIndoorEnabled()
, come avviene ora. Per
impostazione predefinita, setIndoorEnabled
è true
. Le note di rilascio ti avviseranno quando l'assistenza per interni non sarà disponibile per questi tipi di mappa.

Ecco un riepilogo delle funzionalità di Mappe di interni nell'API:
- Puoi disattivare le mappe di interni chiamando
GoogleMap.setIndoorEnabled(false)
. Per impostazione predefinita, le mappe di interni sono attivate. Le mappe di interni vengono visualizzate su una mappa alla volta. Per impostazione predefinita, questa è la prima mappa aggiunta alla tua app. Per visualizzare le mappe di interni su un'altra mappa, disattivale sulla prima mappa, quindi chiamasetIndoorEnabled(true)
sulla seconda mappa. - Per disattivare il selettore del livello predefinito (selettore di piani), chiama
GoogleMap.getUiSettings().setIndoorLevelPickerEnabled(false)
. Per ulteriori dettagli, consulta Interazione con la mappa. OnIndoorStateChangeListener
: definisce i listener che rilevano quando un edificio diventa attivo o viene attivato un livello all'interno di un edificio. Per i dettagli, consulta Interazione con la mappa.getFocusedBuilding
: recupera l'edificio attivo. Puoi trovare il livello attivo chiamandoIndoorBuilding.getActiveLevelIndex()
.- L'applicazione di stili alla mappa base non influisce sulle mappe di interni.
Configura spaziatura interna della mappa
Questo video mostra un esempio di spaziatura interna della mappa.
Una mappa di Google è progettata per riempire l'intera area geografica definita dal suo elemento contenitore, in genere un elemento MapView
o SupportMapFragment
. Diversi aspetti di come la mappa appare e si comporta sono definiti dalle dimensioni del suo contenitore:
- Il target della videocamera rifletterà il centro della regione imbottita.
- I controlli mappa sono posizionati in base ai bordi della mappa.
- Le informazioni legali, come le dichiarazioni sul copyright o il logo di Google, vengono visualizzate sul bordo inferiore della mappa.
Puoi aggiungere una spaziatura interna intorno ai bordi della mappa utilizzando GoogleMap
.setPadding()
. La mappa continuerà a riempire l'intero contenitore, ma il posizionamento del testo e dei controlli, i gesti delle mappe e i movimenti della videocamera si comporteranno come se fossero stati posizionati in uno spazio più piccolo. Questo comporta le seguenti modifiche:
- I movimenti della videocamera tramite chiamate API o pressioni di pulsanti (ad esempio bussola, la mia posizione, pulsanti di zoom) sono relativi alla regione imbottita.
- Il metodo
getCameraPosition
restituisce il centro della regione imbottita. - I metodi
Projection
egetVisibleRegion
restituiscono la regione imbottita. - I controlli dell'interfaccia utente sono offset dal bordo del container in base al numero di pixel specificato.
La spaziatura interna può essere utile nella progettazione di interfacce utente che si sovrappongono ad alcune parti della mappa. Nell'immagine seguente, la mappa viene riempita lungo i bordi superiore e destro. I controlli e il testo legale visibili della mappa verranno visualizzati lungo i bordi della regione imbottita, mostrata in verde, mentre la mappa continuerà a riempire l'intero contenitore, mostrata in blu. In questo esempio, puoi rendere mobile un menu sul lato destro della mappa senza oscurare i controlli della mappa.