Mit dem Navigation SDK für Android können Sie die Nutzererfahrung mit Ihrer Karte anpassen, indem Sie festlegen, welche der integrierten UI-Steuerelemente und ‑Elemente auf der Karte angezeigt werden. Sie können auch die visuelle Darstellung der Navigations-UI anpassen. Auf der Seite „Richtlinien“ finden Sie Richtlinien zu zulässigen Änderungen an der Navigations-UI.
In diesem Dokument werden zwei Möglichkeiten beschrieben, wie Sie die Benutzeroberfläche Ihrer Karte ändern können:
UI-Steuerelemente für die Karte
Wenn Sie benutzerdefinierte UI-Elemente in der Navigationsansicht platzieren möchten, verwenden Sie die UI-Steuerelemente der Karte, um sie richtig zu positionieren. Wenn sich das integrierte Layout ändert, werden die benutzerdefinierten Steuerelemente vom Navigation SDK for Android automatisch neu positioniert.
Sie können für jede Position jeweils eine benutzerdefinierte Steuerungsansicht festlegen. Wenn Ihr Design mehrere UI-Elemente erfordert, können Sie diese in einem ViewGroup platzieren und an die Methode setCustomControl übergeben.
Die Methode setCustomControl liefert Positionen, wie sie im Enum CustomControlPosition definiert sind:
SECONDARY_HEADER(wird nur im Porträtmodus angezeigt)BOTTOM_START_BELOWBOTTOM_END_BELOWFOOTER
Benutzerdefiniertes Steuerelement hinzufügen
- Erstellen Sie eine Android-Ansicht mit dem benutzerdefinierten UI-Element oder der ViewGroup.
- Blähe die XML-Datei auf oder instanziiere die benutzerdefinierte Ansicht, um eine Instanz der Ansicht zu erhalten.
Verwenden Sie
NavigationView.setCustomControloderNavigationFragment.setCustomControlmit der ausgewählten Position des benutzerdefinierten Steuerelements aus derCustomControlPosition-Aufzählung.Im folgenden Beispiel wird ein Fragment erstellt und ein benutzerdefiniertes Steuerelement an der Position des sekundären Headers hinzugefügt.
mNavFragment.setCustomControl(getLayoutInflater(). inflate(R.layout.your_custom_control, null), CustomControlPosition.SECONDARY_HEADER); ```
Benutzerdefinierte Einstellung entfernen
Wenn Sie ein benutzerdefiniertes Steuerelement entfernen möchten, rufen Sie die Methode setCustomControl mit dem Ansichtsparameter null und der ausgewählten Position des benutzerdefinierten Steuerelements auf.
Im folgenden Snippet wird beispielsweise ein benutzerdefinierter sekundärer Header entfernt und der Standardinhalt zurückgegeben:
mNavFragment.setCustomControl(null, CustomControlPosition.SECONDARY_HEADER);
Benutzerdefinierte Positionen für Steuerelemente
Sekundäre Kopfzeile
Wenn Sie diese benutzerdefinierte Position für Steuerelemente verwenden möchten, übergeben Sie die Position CustomControlPosition.SECONDARY_HEADER an setCustomControl.
Standardmäßig bieten Bildschirmlayouts im Navigationsmodus eine Position für eine sekundäre Überschrift unter der primären Überschrift. Diese sekundäre Überschrift wird bei Bedarf angezeigt, z. B. bei der Spurführung. Ihre App kann diese sekundäre Headerposition des Layouts für benutzerdefinierte Inhalte verwenden. Wenn Sie diese Funktion verwenden, deckt Ihr Steuerelement alle standardmäßigen sekundären Headerinhalte ab. Wenn Ihre Navigationsansicht einen Hintergrund hat, bleibt dieser Hintergrund erhalten und wird vom sekundären Header verdeckt. Wenn die benutzerdefinierte Einstellung in der App entfernt wird, kann an ihrer Stelle ein standardmäßiger sekundärer Header angezeigt werden.
Die benutzerdefinierte sekundäre Headerposition richtet die Oberkante an der Unterkante des primären Headers aus. Diese Position wird nur in portrait mode unterstützt. In landscape mode ist der sekundäre Header nicht verfügbar und das Layout ändert sich nicht.
Unten links
Wenn Sie diese benutzerdefinierte Position für Steuerelemente verwenden möchten, übergeben Sie die Position CustomControlPosition.BOTTOM_START_BELOW an setCustomControl.
Diese benutzerdefinierte Steuerelementposition befindet sich in der unteren linken Ecke der Karte. Sowohl in portrait mode als auch in landscape mode befindet sie sich über der voraussichtliche-Ankunft-Karte und/oder der benutzerdefinierten Fußzeile (oder am unteren Rand der Karte, wenn keine der beiden vorhanden ist). Nav SDK-Elemente wie die Schaltfläche „Neu zentrieren“ und das Google-Logo werden nach oben verschoben, um die Höhe der benutzerdefinierten Steuerungsansicht zu berücksichtigen. Dieses Steuerelement befindet sich innerhalb der sichtbaren Kartengrenzen. Wenn Sie also am unteren oder linken Rand der Karte einen Abstand hinzufügen, ändert sich auch die Position dieses Steuerelements.
Unteres Ende
Wenn Sie diese benutzerdefinierte Position für Steuerelemente verwenden möchten, übergeben Sie die Position CustomControlPosition.BOTTOM_END_BELOW an setCustomControl.
Diese benutzerdefinierte Steuerelementposition befindet sich in der unteren Ecke der Karte. In portrait mode befindet sie sich über der voraussichtliche-Ankunft-Karte und/oder der benutzerdefinierten Fußzeile (oder am unteren Rand der Karte, wenn weder die Karte noch die Fußzeile vorhanden ist). In landscape mode ist sie am unteren Rand der Karte ausgerichtet. Alle Nav SDK-Elemente, die auf der rechten Seite (bei LTR) sichtbar sind, werden nach oben verschoben, um die Höhe der benutzerdefinierten Steuerelementansicht zu berücksichtigen. Dieses Steuerelement befindet sich innerhalb der sichtbaren Kartengrenzen. Wenn Sie also am unteren oder rechten Rand der Karte einen Abstand hinzufügen, ändert sich auch die Position dieses Steuerelements.
Fußzeile
Wenn Sie diese benutzerdefinierte Position für Steuerelemente verwenden möchten, übergeben Sie die Position CustomControlPosition.FOOTER an setCustomControl.
Diese benutzerdefinierte Steuerelementposition ist für eine benutzerdefinierte Fußzeilenansicht vorgesehen. Wenn die voraussichtliche-Ankunft-Karte des Nav SDK sichtbar ist, befindet sich dieses Steuerelement darüber. Andernfalls wird das Steuerelement am unteren Rand der Karte ausgerichtet. Im Gegensatz zu den benutzerdefinierten Steuerelementen BOTTOM_START_BELOW und BOTTOM_END_BELOW befindet sich dieses Steuerelement außerhalb der sichtbaren Kartengrenzen. Das bedeutet, dass sich die Position dieses Steuerelements nicht ändert, wenn der Karte ein Padding hinzugefügt wird.
In portrait mode wird die benutzerdefinierte Fußzeile in voller Breite angezeigt. Benutzerdefinierte Steuerelemente an den Positionen CustomControlPosition.BOTTOM_START_BELOW und CustomControlPosition.BOTTOM_END_BELOW sowie UI-Elemente des Nav SDK wie die Schaltfläche „Neu zentrieren“ und das Google-Logo werden über der Fußzeile für benutzerdefinierte Steuerelemente positioniert. Bei der Standardposition des Winkels wird die benutzerdefinierte Höhe der Fußzeile berücksichtigt.
In landscape mode hat die benutzerdefinierte Fußzeile die halbe Breite und ist an der Startseite (links in LTR) ausgerichtet, genau wie die Nav SDK-Karte für die voraussichtliche Ankunft. Die benutzerdefinierten Steuerelemente an der Position CustomControlPosition.BOTTOM_START_BELOW und die UI-Elemente des Nav SDK, z. B. die Schaltfläche „Neu zentrieren“ und das Google-Logo, werden über der Fußzeile mit den benutzerdefinierten Steuerelementen positioniert. Die benutzerdefinierten Steuerelemente an der Position CustomControlPosition.BOTTOM_END_BELOW und alle UI-Elemente des Nav SDK auf der Endseite (rechte Seite in LTR) bleiben am unteren Rand der Karte ausgerichtet. Die Standardposition des Winkelzeichens ändert sich nicht, wenn eine benutzerdefinierte Fußzeile vorhanden ist, da die Fußzeile nicht bis zum Ende der Karte reicht.
Benutzerdefinierte Steuerelemente an den Positionen CustomControlPosition.BOTTOM_START_BELOW und CustomControlPosition.BOTTOM_END_BELOW sowie UI-Elemente des Nav SDK wie die Schaltfläche zum Neuzentrieren und das Google-Logo werden über der Fußzeile für benutzerdefinierte Steuerelemente positioniert.
UI-Zubehör für Karten
Das Navigation SDK for Android bietet UI-Zubehör, das während der Navigation angezeigt wird, ähnlich wie in der Google Maps App für Android. Sie können die Sichtbarkeit oder das Erscheinungsbild dieser Steuerelemente wie in diesem Abschnitt beschrieben anpassen. Änderungen, die Sie hier vornehmen, werden bei der nächsten Navigationssitzung berücksichtigt.
Auf der Seite „Richtlinien“ finden Sie Richtlinien zu zulässigen Änderungen an der Navigations-UI.
Code ansehen
Hervorhebung von Zielen und Eingängen
Wenn ein Ziel mit einer placeID erstellt wird, wird das Zielgebäude hervorgehoben und nach Möglichkeit ein Eingangssymbol angezeigt. Diese visuellen Hinweise helfen Nutzern, ihr Ziel zu erkennen und dorthin zu navigieren.
Verwenden Sie zum Erstellen eines Ziels mit einem placeID die Methode Waypoint.Builder.setPlaceIdString().

Navigationsheader ändern

Verwenden Sie NavigationFragment.setStylingOptions() oder NavigationView.setStylingOptions(), um das Design des Navigationsheaders und der Anzeige für die nächste Abbiegung zu ändern, die gegebenenfalls unter dem Header angezeigt wird.
Sie können die folgenden Attribute festlegen:
| Attributtyp | Attribute |
|---|---|
| Hintergrundfarbe |
|
| Textelemente für Anleitungen |
|
| Textelemente für die nächsten Schritte |
|
| Symbole für Fahrmanöver |
|
| Spurführung |
|
Im folgenden Beispiel wird gezeigt, wie Stiloptionen festgelegt werden:
private NavigationFragment mNavFragment;
mNavFragment = (NavigationFragment) getSupportFragmentManager()
.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));
Verkehrsebene deaktivieren
Mit GoogleMap.setTrafficEnabled() können Sie die Verkehrsebene auf der Karte aktivieren oder deaktivieren. Diese Einstellung wirkt sich auf die Darstellung der Verkehrsdichte auf der gesamten Karte aus. Die Verkehrshinweise auf der vom Navigator geplanten Route sind davon jedoch nicht betroffen.
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));
Ampeln und Stoppschilder

Während der aktiven Navigation werden auf der Karte Ampeln und Stoppschilder angezeigt, um Nutzern mehr Kontext zur Route und zu bevorstehenden Manövern zu bieten. Ab Version 8.0.0 kann diese Funktion nicht mehr deaktiviert werden.
Benutzerdefinierte Markierungen hinzufügen
Das Navigation SDK for Android verwendet jetzt Google Maps APIs für Markierungen. Weitere Informationen finden Sie in der Google Maps-API-Dokumentation.
Unverankerter Text
Sie können überall in Ihrer App schwebenden Text hinzufügen, sofern die Google-Quellenangabe dadurch nicht verdeckt wird. Das Navigation SDK unterstützt nicht das Verankern des Texts an einem Breiten-/Längengrad auf der Karte oder an einem Label. Weitere Informationen finden Sie unter Infofenster.
Tempolimit anzeigen
Sie können das Tempolimit-Symbol programmatisch ein- oder ausblenden. Verwenden Sie NavigationView.setSpeedLimitIconEnabled() oder NavigationFragment.setSpeedLimitIconEnabled(), um das Symbol für die zulässige Höchstgeschwindigkeit ein- oder auszublenden. Wenn diese Option aktiviert ist, wird das Symbol für die Höchstgeschwindigkeit während der Zielführung in einer der unteren Ecken angezeigt. Das Symbol zeigt das Tempolimit der Straße an, auf der das Fahrzeug fährt. Das Symbol wird nur an Orten angezeigt, für die zuverlässige Daten zu Tempolimits verfügbar sind.
// Display the Speed Limit icon
mNavFragment.setSpeedLimitIconEnabled(true);
Das Symbol für die Geschwindigkeitsbegrenzung wird vorübergehend ausgeblendet, wenn die Schaltfläche „Neu zentrieren“ angezeigt wird.
Nachtmodus festlegen
Du kannst das Verhalten des Nachtmodus programmatisch steuern. Mit NavigationView.setForceNightMode() oder NavigationFragment.setForceNightMode() können Sie den Nachtmodus aktivieren oder deaktivieren. Alternativ können Sie ihn auch über das Navigation SDK for Android steuern lassen.
AUTO: Das Navigation SDK bestimmt den geeigneten Modus anhand des Gerätestandorts und der Ortszeit.FORCE_NIGHTerzwingt den Nachtmodus.FORCE_DAYerzwingt den Tagmodus.
Im folgenden Beispiel wird gezeigt, wie der Nachtmodus in einem Navigationsfragment aktiviert wird:
// Force night mode on.
mNavFragment.setForceNightMode(FORCE_NIGHT);
Liste mit Routen anzeigen
Erstellen Sie zuerst die Ansicht und fügen Sie sie Ihrer Hierarchie hinzu.
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));
}
Achten Sie darauf, Lifecycle-Events an die DirectionsListView weiterzuleiten, genau wie bei NavigationView. Beispiel:
protected void onResume() {
super.onResume();
directionsListView.onResume();
}
Alternative Routen ausblenden
Wenn die Benutzeroberfläche mit zu vielen Informationen überladen ist, können Sie die Unordnung reduzieren, indem Sie weniger alternative Routen als die Standardanzahl (zwei) oder gar keine alternativen Routen anzeigen. Sie können diese Option konfigurieren, bevor Sie die Routen abrufen, indem Sie die Methode RoutingOptions.alternateRoutesStrategy() mit einem der folgenden Aufzählungswerte aufrufen:
| Aufzählungswert | Beschreibung |
|---|---|
| AlternateRoutesStrategy.SHOW_ALL | Standard. Zeigt bis zu zwei alternative Routen an. |
| AlternateRoutesStrategy.SHOW_ONE | Zeigt eine alternative Route an (falls verfügbar). |
| AlternateRoutesStrategy.SHOW_NONE | Blendet alternative Routen aus. |
Im folgenden Codebeispiel wird gezeigt, wie Sie alternative Routen vollständig ausblenden.
RoutingOptions routingOptions = new RoutingOptions();
routingOptions.alternateRoutesStrategy(AlternateRoutesStrategy.SHOW_NONE);
navigator.setDestinations(destinations, routingOptions, displayOptions);
Fortschrittsanzeige für die Fahrt

Die Fortschrittsanzeige für die Fahrt ist eine vertikale Leiste, die zu Beginn der Navigation auf der Start-/Vorderseite der Karte angezeigt wird. Wenn diese Option aktiviert ist, wird eine Übersicht für die gesamte Fahrt zusammen mit dem Ziel und der aktuellen Position des Nutzers angezeigt.
So können Nutzer bevorstehende Probleme wie Staus vorhersehen, ohne heranzoomen zu müssen. Die Route kann dann bei Bedarf neu berechnet werden. Wenn der Nutzer die Route neu berechnet, wird die Fortschrittsanzeige zurückgesetzt, als ob ab diesem Punkt eine neue Fahrt begonnen hätte.
In der Fortschrittsanzeige für die Fahrt werden die folgenden Statusindikatoren angezeigt:
Zurückgelegte Route: Der bereits zurückgelegte Teil der Fahrt.
Aktuelle Position: Der aktuelle Standort des Nutzers auf der Fahrt.
Verkehrslage: Die Verkehrslage auf der Strecke.
Zielort: Das endgültige Ziel der Fahrt.
Aktivieren Sie die Fortschrittsanzeige für die Fahrt, indem Sie die Methode setTripProgressBarEnabled() für NavigationView oder NavigationFragment aufrufen.
Beispiel:
// Enable the trip progress bar.
mNavFragment.setTripProgressBarEnabled(true);
Positionierung der Fortschrittsanzeige für die Fahrt
- Die linke Seite der Leiste ist ungefähr am linken Rand des Tachometers, des Google-Logos und der Schaltfläche „Neu zentrieren“ (falls sichtbar) ausgerichtet. Die Breite beträgt 12 dp.
- Die Fortschrittsanzeige für die Fahrt hat eine statische Höhe. Um die vertikalen Platzbeschränkungen auf kleineren Geräten zu berücksichtigen, werden die Sichtbarkeit und Höhe der Fortschrittsanzeige für die Fahrt anhand von festgelegten Haltepunkten in der Bildschirmhöhe angepasst. Diese Haltepunkte sind unabhängig von der Geräteausrichtung und davon, wie viel Platz die Karte tatsächlich auf dem Bildschirm einnimmt:
- Wenn sich die Fortschrittsanzeige der Fahrt mit der Abbiegekarte oder anderen UI-Elementen der Navigation überschneidet, wird sie unter diesen anderen Elementen angezeigt.
| Bildschirmhöhe | Sichtbarkeit der Fortschrittsanzeige für die Fahrt | Höhe der Fortschrittsanzeige für die Fahrt | Y-Achsenposition der Fortschrittsanzeige für die Fahrt |
|---|---|---|---|
| Klein: 0–551 dp | Nicht sichtbar | – | – |
| Mittel: 552 dp bis 739 dp | Sichtbar | 130 dp | Über den Steuerelementen auf der Startseite (Tachometer / Google-Logo / Schaltfläche „Neu zentrieren“) |
| Groß: ab 740 dp | Sichtbar | 290 dp | Über den Steuerelementen auf der Startseite (Tachometer / Google-Logo / Schaltfläche „Neu zentrieren“) |
Kompass
Das Navigation SDK bietet eine Kompassgrafik, die unter bestimmten Umständen und nur, wenn sie aktiviert ist, oben rechts auf der Karte erscheint. Wenn der Nutzer auf den Kompass klickt, wird die Kamera an eine Position mit Nullrichtung (Standardorientierung) zurückbewegt. Anschließend wird der Kompass ausgeblendet.
Wenn die Navigation aktiviert ist und der Kameramodus auf „Folgen“ eingestellt ist, bleibt der Kompass sichtbar. Durch Tippen auf den Kompass wird zwischen der geneigten Kameraperspektive und der Übersichtsperspektive gewechselt.
Um den Fahrer nicht abzulenken, bleibt der Kompass an derselben Position, wenn sich die Kopfzeile (im Hochformat) vergrößert und mit der Standardposition des Kompasses kollidiert. Wenn Sie ein sekundäres benutzerdefiniertes Steuerelement für die Kopfzeile oder eine Ansicht für Kopfzeilenzubehör hinzufügen, wird der Kompass ausgeblendet, um Konflikte mit der Benutzeroberfläche zu vermeiden.
Der Kompass unterstützt den Tag- und Nachtmodus sowie den dunklen Modus.
Der Kompass ist standardmäßig aktiviert. Mit der Methode compassEnabled der Klasse GoogleMapOptions können Sie festlegen, ob der Kompass aktiviert ist.
3D-Gebäude deaktivieren
Bei Geräten mit eingeschränkter Leistung können Sie die Anzeige von 3D-Gebäuden deaktivieren, indem Sie GoogleMap.setBuildingsEnabled(false) aufrufen.
Prompt Visibility API (experimentell)
Mit der Prompt Visibility API können Sie Konflikte zwischen UI-Elementen, die vom Navigation SDK generiert werden, und Ihren eigenen benutzerdefinierten UI-Elementen vermeiden. Dazu fügen Sie einen Listener hinzu, der einen Callback empfängt, bevor ein UI-Element des Navigation SDK angezeigt wird und sobald das Element entfernt wird. Weitere Informationen, einschließlich Codebeispielen, finden Sie im Abschnitt Prompt Visibility API auf der Seite Echtzeitstörungen konfigurieren.