Modificare l'interfaccia utente di navigazione

Se utilizzi l'SDK di navigazione per Android, puoi modificare l'esperienza utente con la mappa determinando quali controlli ed elementi dell'interfaccia utente integrati vengono visualizzati sulla mappa. Puoi anche modificare l'aspetto dell'interfaccia utente di navigazione. Consulta la pagina Norme per le linee guida sulle modifiche accettabili all'interfaccia di navigazione.

Questo documento descrive come modificare l'interfaccia utente della tua mappa in due modi:

Controlli UI mappa

I controlli UI della mappa si trovano nella parte superiore della visualizzazione di navigazione. L'SDK di navigazione per Android riposiziona automaticamente i controlli personalizzati quando il layout integrato cambia. Per ogni posizione del layout, puoi impostare un controllo personalizzato. Il controllo personalizzato può essere costituito da un solo elemento UI oppure, se il tuo design richiede più elementi, puoi utilizzare un elemento ViewGroup con più elementi UI.

Il metodo setCustomControl fornisce le posizioni come definite nell'enumerazione CustomControlPosition:

  • SECONDARY_HEADER (visualizzato solo in modalità verticale)
  • BOTTOM_START_BELOW
  • BOTTOM_END_BELOW

L'immagine mostra esempi di varie posizioni di un controllo UI che indica al conducente la posizione di un passeggero.

Posizioni di controllo personalizzate

Aggiungi un'intestazione secondaria personalizzata

Per impostazione predefinita, i layout delle schermate in modalità di navigazione forniscono la posizione di un'intestazione secondaria situata sotto l'intestazione principale. Questa intestazione secondaria viene visualizzata se necessario, ad esempio con l'indicazione delle corsie in cui posizionarsi. L'app può usare questa posizione dell'intestazione secondaria del layout per i contenuti personalizzati. Quando utilizzi questa funzionalità, il controllo copre tutti i contenuti predefiniti dell'intestazione secondaria. Se la visualizzazione di navigazione ha uno sfondo, questo rimane attivo, coperto dall'intestazione secondaria. Quando l'app rimuove il controllo personalizzato, al suo posto potrebbe essere visualizzata qualsiasi intestazione secondaria predefinita.

La posizione dell'intestazione secondaria personalizzata allinea il bordo superiore al bordo inferiore dell'intestazione principale. Questa posizione è supportata solo in portrait mode. In landscape mode, l'intestazione secondaria non è disponibile e il layout non cambia.

  1. Crea una vista Android con l'elemento UI personalizzato o ViewGroup.
  2. Aumenta il codice XML o crea un'istanza della visualizzazione personalizzata per ottenere un'istanza della vista da aggiungere come intestazione secondaria.
  3. Utilizza NavigationView.setCustomControl o SupportNavigationFragment.setCustomControl con CustomControlPosition come SECONDARY_HEADER.

    L'esempio seguente crea un frammento e aggiunge un controllo personalizzato nella posizione dell'intestazione secondaria.

     mNavFragment.setCustomControl(getLayoutInflater().
       inflate(R.layout.your_custom_control, null),
       CustomControlPosition.SECONDARY_HEADER);
    

Rimuovere un'intestazione secondaria

Per rimuovere l'intestazione secondaria e tornare ai contenuti predefiniti, utilizza il metodo setCustomControl.

Imposta la vista su null per rimuoverla.

mNavFragment.setCustomControl(null, CustomControlPosition.SECONDARY_HEADER);

Aggiungi un controllo personalizzato in fondo alla visualizzazione di navigazione

L'app può specificare un controllo personalizzato allineato al bordo inferiore della visualizzazione di navigazione. Quando nell'app viene aggiunto il controllo personalizzato, il pulsante riposizionati al centro e il logo Google vengono spostati verso l'alto per adattarli al controllo.

  1. Crea una vista Android con l'elemento UI o il gruppo di visualizzazioni che vuoi aggiungere.
  2. Crea la visualizzazione di navigazione o il frammento.
  3. Richiama il metodo setCustomControl nella visualizzazione o nel frammento di navigazione e specifica il controllo e la posizione da utilizzare.

L'esempio seguente mostra un elemento View personalizzato aggiunto a un SupportNavigationFragment:

private SupportNavigationFragment mNavFragment;
mNavFragment = (SupportNavigationFragment)
  getFragmentManager().findFragmentById(R.id.navigation_fragment);

// Create the custom control view.
MyCustomView myCustomView = new MyCustomView();

// Add the custom control to the bottom end corner of the layout.
mNavFragment.setCustomControl(myCustomView, CustomControlPosition.
  BOTTOM_END_BELOW);

Rimuovere un controllo personalizzato

Per rimuovere il controllo personalizzato, utilizza il metodo setCustomControl e specifica la posizione del controllo da rimuovere.

Imposta la visualizzazione su null per quella posizione.

mNavFragment.setCustomControl(null, CustomControlPosition.BOTTOM_END_BELOW);

Accessori UI mappa

L'SDK Navigation for Android fornisce accessori dell'interfaccia utente che vengono visualizzati durante la navigazione simili a quelli che si trovano nell'applicazione Google Maps per Android. Puoi regolare la visibilità o l'aspetto di questi controlli come descritto in questa sezione. Le modifiche che apporti qui verranno applicate alla prossima corsa del conducente.

Consulta la pagina Norme per le linee guida sulle modifiche accettabili all'interfaccia utente di navigazione.

Visualizza il codice

Modifica l'intestazione di navigazione

Utilizza SupportNavigationFragment.setStylingOptions() o NavigationView.setStylingOptions() per modificare il tema dell'intestazione di navigazione e l'indicatore della prossima svolta visualizzato sotto l'intestazione, se disponibile.

Puoi impostare i seguenti attributi:

Tipo di attributoAttributi
Colore sfondo
  • Modalità giorno principale: il colore giorno dell'intestazione di navigazione
  • Modalità giorno secondaria: il colore diurno dell'indicatore della prossima svolta.
  • Modalità notturna principale: il colore notturno dell'intestazione di navigazione
  • Modalità notturna secondaria: il colore notturno dell'indicatore della prossima svolta.
Elementi di testo per le istruzioni
  • Colore testo
  • Carattere
  • Dimensioni del testo della prima riga
  • Dimensioni del testo della seconda riga
Elementi di testo per i passaggi successivi
  • Carattere
  • Colore del testo del valore della distanza
  • Dimensioni del testo del valore della distanza
  • Colore del testo delle unità di misura
  • Dimensioni del testo delle unità di distanza
Icone di manovra
  • Colore dell'icona della manovra grande
  • Colore dell'icona della piccola manovra
Indicazione delle corsie in cui posizionarsi
  • Colore della corsia o delle corsie consigliate

Nell'esempio seguente viene illustrato come impostare le opzioni di stile:

private SupportNavigationFragment mNavFragment;
mNavFragment = (SupportNavigationFragment) getFragmentManager()
  .findFragmentById(R.id.navigation_fragment);

// Set the styling options on the fragment.
mNavFragment.setStylingOptions(new StylingOptions()
  .primaryDayModeThemeColor(0xff1A237E)
  .secondaryDayModeThemeColor(0xff3F51B5)
  .primaryNightModeThemeColor(0xff212121)
  .secondaryNightModeThemeColor(0xff424242)
  .headerLargeManeuverIconColor(0xffffff00)
  .headerSmallManeuverIconColor(0xffffa500)
  .headerNextStepTypefacePath("/system/fonts/NotoSerif-BoldItalic.ttf")
  .headerNextStepTextColor(0xff00ff00)
  .headerNextStepTextSize(20f)
  .headerDistanceTypefacePath("/system/fonts/NotoSerif-Italic.ttf")
  .headerDistanceValueTextColor(0xff00ff00)
  .headerDistanceUnitsTextColor(0xff0000ff)
  .headerDistanceValueTextSize(20f)
  .headerDistanceUnitsTextSize(18f)
  .headerInstructionsTypefacePath("/system/fonts/NotoSerif-BoldItalic.ttf")
  .headerInstructionsTextColor(0xffffff00)
  .headerInstructionsFirstRowTextSize(24f)
  .headerInstructionsSecondRowTextSize(20f)
  .headerGuidanceRecommendedLaneColor(0xffffa500));

Disattivare il livello del traffico

Utilizza GoogleMap.setTrafficEnabled() per abilitare o disabilitare il livello di traffico sulla mappa. Questa impostazione influenza le indicazioni della densità del traffico mostrate sulla mappa nel suo complesso. Tuttavia, non influisce sulle indicazioni del traffico sul percorso tracciato dal navigatore.

private GoogleMap mMap;
// Get the map, and when the async call returns, setTrafficEnabled
// (callback will be on the UI thread)
mMap = mNavFragment.getMapAsync(navMap -> navMap.setTrafficEnabled(false));

Attiva i semafori e i segnali di stop

Puoi attivare i semafori e i segnali di stop nell'interfaccia utente della mappa. Con questa funzionalità, il conducente può visualizzare le icone dei semafori o dei segnali di stop lungo il percorso, fornendo un contesto migliore per corse più efficienti e accurate.

Per impostazione predefinita, i semafori e i segnali di stop sono disattivati nell'SDK di navigazione. Per attivare questa funzionalità, chiama DisplayOptions per ogni funzionalità in modo indipendente.

DisplayOptions displayOptions =
  new DisplayOptions().showTrafficLights(true).showStopSigns(true);

Aggiungi indicatori personalizzati

L'SDK di navigazione per Android ora utilizza le API di Google Maps per gli indicatori. Per ulteriori informazioni, consulta la documentazione dell'API di Google Maps.

Testo mobile

Puoi aggiungere testo mobile in qualsiasi punto dell'app, a condizione che non copra l'attribuzione Google. L'SDK di navigazione non supporta l'ancoraggio del testo a latitudine/longitudine sulla mappa o a un'etichetta. Per ulteriori informazioni, vai a Finestre informative.

Visualizza il limite di velocità

Puoi mostrare o nascondere in modo programmatico l'icona del limite di velocità. Utilizza NavigationView.setSpeedLimitIconEnabled() o SupportNavigationFragment.setSpeedLimitIconEnabled() per visualizzare o nascondere l'icona del limite di velocità. Quando la funzionalità è attivata, l'icona del limite di velocità viene visualizzata in basso durante le indicazioni. L'icona mostra il limite di velocità della strada su cui viaggia il veicolo. L'icona viene visualizzata solo nelle località in cui sono disponibili dati affidabili sui limiti di velocità.

// Display the Speed Limit icon
mNavFragment.setSpeedLimitIconEnabled(true);

L'icona del limite di velocità è temporaneamente nascosta quando viene visualizzato il pulsante di riposizionamento.

Imposta modalità notturna

Puoi controllare in modo programmatico il comportamento della modalità notturna. Utilizza NavigationView.setForceNightMode() o SupportNavigationFragment.setForceNightMode() per attivare o disattivare la modalità notturna oppure lascia che sia l'SDK di navigazione per Android a controllarla.

  • AUTO Consente all'SDK di navigazione di determinare la modalità appropriata in base alla posizione del dispositivo e all'ora locale.
  • FORCE_NIGHT forza l'attivazione della modalità notturna.
  • FORCE_DAY impone l'attivazione della modalità Giorno.

L'esempio seguente mostra come forzare l'attivazione della modalità notturna all'interno di un frammento di navigazione:

// Force night mode on.
mNavFragment.setForceNightMode(FORCE_NIGHT);

Visualizza elenco indicazioni stradali

Innanzitutto, crea la vista e aggiungila alla gerarchia.

void setupDirectionsListView() {
  // Create the view.
  DirectionsListView directionsListView = new DirectionsListView(getApplicationContext());
  // Add the view to your view hierarchy.
  ViewGroup group = findViewById(R.id.directions_view);
  group.addView(directionsListView);

  // Add a button to your layout to close the directions list view.
  ImageButton button = findViewById(R.id.close_directions_button); // this button is part of the container we hide in the next line.
  button.setOnClickListener(
      v -> findViewById(R.id.directions_view_container).setVisibility(View.GONE));
}

Assicurati di inoltrare gli eventi del ciclo di vita a DirectionsListView come avviene con NavigationView. Ad esempio:

protected void onResume() {
  super.onResume();
  directionsListView.onResume();
}

Le route alternative verranno nascoste

Quando l'interfaccia utente contiene troppe informazioni, puoi ridurre il disordine visualizzando meno percorsi alternativi rispetto a quelli predefiniti (due) o senza vedere affatto percorsi alternativi. Puoi configurare questa opzione prima di recuperare le route chiamando il metodo RoutingOptions.alternateRoutesStrategy() con uno dei seguenti valori di enumerazione:

Valore di enumerazioneDescrizione
AlternateRoutesStrategy.SHOW_ALL Predefinita. Visualizza fino a due percorsi alternativi.
AlternateRoutesStrategy.SHOW_ONE Visualizza un percorso alternativo (se disponibile).
AlternateRoutesStrategy.SHOW_NONE Nasconde i percorsi alternativi.

Il seguente esempio di codice mostra come nascondere del tutto le route alternative.

RoutingOptions routingOptions = new RoutingOptions();
routingOptions.alternateRoutesStrategy(AlternateRoutesStrategy.SHOW_NONE);
navigator.setDestinations(destinations, routingOptions, displayOptions);

Barra di avanzamento del percorso

Barra di avanzamento del percorso aggiunta alla navigazione.

La barra di avanzamento del percorso è una barra verticale visualizzata sul bordo posteriore destro della mappa all'avvio della navigazione. Quando abilitata, mostra una panoramica di un'intera corsa, con la destinazione del conducente e la posizione attuale.

Offre ai conducenti la possibilità di anticipare rapidamente eventuali problemi imminenti, come il traffico, senza dover aumentare lo zoom. Poi possono cambiare il percorso, se necessario. Se l'autista la reindirizza, la barra di avanzamento si reimposta come se fosse iniziata una nuova corsa da quel punto.

La barra di avanzamento del percorso mostra i seguenti indicatori di stato:

  • Percorso trascorso: la parte della corsa trascorsa.

  • Posizione attuale: la posizione attuale del conducente nella corsa.

  • Stato del traffico: lo stato del traffico futuro.

  • Destinazione finale: la destinazione finale del viaggio.

Attiva la barra di avanzamento del percorso chiamando il metodo setTripProgressBarEnabled() su NavigationView o SupportNavigationFragment. Ad esempio:

// Enable the trip progress bar.
mNavFragment.setTripProgressBarEnabled(true);