Dzięki pakietowi Navigation SDK na Androida możesz modyfikować wrażenia użytkowników związane z mapą, określając, które z wbudowanych elementów sterujących interfejsu i elementów mają się na niej wyświetlać. Możesz też dostosować wygląd interfejsu nawigacji. Wskazówki dotyczące dopuszczalnych modyfikacji interfejsu nawigacji znajdziesz na stronie z zasadami.
W tym dokumencie opisano, jak zmodyfikować interfejs mapy na 2 sposoby:
Elementy sterujące interfejsu mapy
Aby umieścić niestandardowe elementy interfejsu w widoku nawigacji, użyj elementów sterujących interfejsu mapy, aby zapewnić prawidłowe pozycjonowanie. Gdy wbudowany układ się zmieni, pakiet Navigation SDK na Androida automatycznie zmieni pozycję elementów sterujących.
Dla każdej pozycji możesz ustawić tylko 1 niestandardowy widok sterowania. Jeśli projekt wymaga wielu elementów interfejsu, możesz umieścić je w obiekcie ViewGroup i przekazać do metody setCustomControl.
Metoda setCustomControl udostępnia pozycje zdefiniowane w CustomControlPosition enum:
SECONDARY_HEADER(wyświetla się tylko w trybie portretowym)BOTTOM_START_BELOWBOTTOM_END_BELOWFOOTER
Dodawanie niestandardowego elementu sterującego
- Utwórz widok Androida z niestandardowym elementem interfejsu lub elementem ViewGroup.
- Rozwiń kod XML lub utwórz instancję widoku niestandardowego, aby uzyskać instancję widoku.
Użyj
NavigationView.setCustomControllubNavigationFragment.setCustomControlz wybraną pozycją elementu sterującego zCustomControlPositionenum.W tym przykładzie tworzony jest fragment i dodawany jest niestandardowy element sterujący w pozycji nagłówka dodatkowego.
mNavFragment.setCustomControl(getLayoutInflater(). inflate(R.layout.your_custom_control, null), CustomControlPosition.SECONDARY_HEADER); ```
Usuwanie niestandardowego elementu sterującego
Aby usunąć element niestandardowy, wywołaj metodę setCustomControl z parametrem widoku null i wybraną pozycją elementu niestandardowego.
Na przykład ten fragment kodu usuwa niestandardowy nagłówek dodatkowy i przywraca domyślną treść:
mNavFragment.setCustomControl(null, CustomControlPosition.SECONDARY_HEADER);
Niestandardowe pozycje elementów sterujących
Nagłówek dodatkowy
Aby użyć tej niestandardowej pozycji elementu sterującego, przekaż pozycję CustomControlPosition.SECONDARY_HEADER do setCustomControl.
Domyślnie układy ekranu w trybie nawigacji zawierają miejsce na nagłówek dodatkowy, który znajduje się pod nagłówkiem głównym. Ten dodatkowy nagłówek pojawia się w razie potrzeby, np. z asystentem pasa ruchu. Aplikacja może używać tej dodatkowej pozycji nagłówka układu do wyświetlania treści niestandardowych. Gdy używasz tej funkcji, Twój element sterujący obejmuje wszystkie domyślne treści nagłówka dodatkowego. Jeśli widok nawigacji ma tło, pozostaje ono na swoim miejscu, przykryte nagłówkiem dodatkowym. Gdy aplikacja usunie element niestandardowy, w jego miejscu może pojawić się domyślny nagłówek dodatkowy.
Niestandardowy nagłówek dodatkowy jest wyrównany górną krawędzią do dolnej krawędzi nagłówka głównego. Ta pozycja jest obsługiwana tylko w języku portrait mode. W landscape mode nagłówek dodatkowy jest niedostępny, a układ się nie zmienia.
Od dołu od początku
Aby użyć tej niestandardowej pozycji elementu sterującego, przekaż pozycję CustomControlPosition.BOTTOM_START_BELOW do setCustomControl.
Ta niestandardowa pozycja elementu sterującego znajduje się w lewym dolnym rogu mapy. Zarówno w portrait mode, jak i landscape mode znajduje się nad kartą szacowanego czasu dotarcia na miejsce lub niestandardową stopką (albo u dołu mapy, jeśli nie ma żadnego z tych elementów). Elementy pakietu SDK nawigacji, w tym przycisk wyśrodkowania i logo Google, przesuwają się w górę, aby uwzględnić wysokość widoku niestandardowego elementu sterującego. Ten element sterujący znajduje się w widocznych granicach mapy, więc każde dopełnienie dodane do dolnej lub początkowej krawędzi mapy zmieni też jego pozycję.
Dolny koniec
Aby użyć tej niestandardowej pozycji elementu sterującego, przekaż pozycję CustomControlPosition.BOTTOM_END_BELOW do setCustomControl.
Ta niestandardowa pozycja elementu sterującego znajduje się w dolnym rogu mapy. W portrait mode znajduje się nad kartą szacowanego czasu dotarcia na miejsce lub niestandardową stopką (albo u dołu mapy, jeśli nie ma żadnego z tych elementów), ale w landscape mode jest wyrównany do dołu mapy. Wszystkie elementy pakietu SDK do nawigacji widoczne po prawej stronie (w przypadku języków pisanych od lewej do prawej) przesuwają się w górę, aby uwzględnić wysokość widoku niestandardowego elementu sterującego. Ten element sterujący znajduje się w widocznych granicach mapy, więc każde dopełnienie dodane do dolnej lub końcowej krawędzi mapy zmieni też jego pozycję.
Stopka
Aby użyć tej niestandardowej pozycji elementu sterującego, przekaż pozycję CustomControlPosition.FOOTER do setCustomControl.
Ta pozycja elementu sterującego jest przeznaczona dla niestandardowego widoku stopki. Jeśli karta szacowanego czasu dotarcia na miejsce pakietu SDK do nawigacji jest widoczna, ten element sterujący znajduje się nad nią. Jeśli nie, element sterujący jest wyrównany do dolnej krawędzi mapy. W przeciwieństwie do elementów sterujących BOTTOM_START_BELOW i BOTTOM_END_BELOW ten element sterujący znajduje się poza widocznymi granicami mapy, co oznacza, że żadne dopełnienie dodane do mapy nie zmieni jego pozycji.
W portrait mode niestandardowa stopka ma pełną szerokość. Niestandardowe elementy sterujące w pozycjach CustomControlPosition.BOTTOM_START_BELOW i CustomControlPosition.BOTTOM_END_BELOW, a także elementy interfejsu pakietu SDK nawigacji, takie jak przycisk ponownego wyśrodkowania i logo Google, są umieszczone nad stopką niestandardowych elementów sterujących. Domyślna pozycja strzałki uwzględnia niestandardową wysokość stopki.
W trybie landscape mode niestandardowa stopka ma połowę szerokości i jest wyrównana do strony początkowej (lewej strony w językach pisanych od lewej do prawej), podobnie jak karta szacowanego czasu dotarcia na miejsce w pakiecie SDK do nawigacji. Niestandardowe elementy sterujące w pozycji CustomControlPosition.BOTTOM_START_BELOW i elementy interfejsu pakietu SDK do nawigacji, takie jak przycisk ponownego wyśrodkowania i logo Google, są umieszczone nad stopką niestandardowych elementów sterujących. Niestandardowe elementy sterujące w pozycji CustomControlPosition.BOTTOM_END_BELOW i wszystkie elementy interfejsu pakietu SDK do nawigacji po stronie końcowej (po prawej stronie w przypadku języków pisanych od lewej do prawej) pozostają wyrównane do dołu mapy. Domyślna pozycja strzałki nie zmienia się, gdy obecna jest niestandardowa stopka, ponieważ stopka nie rozciąga się do końca mapy.
Niestandardowe elementy sterujące w pozycjach CustomControlPosition.BOTTOM_START_BELOW i CustomControlPosition.BOTTOM_END_BELOW oraz elementy interfejsu pakietu SDK nawigacji, takie jak przycisk ponownego wyśrodkowania i logo Google, są umieszczone nad stopką niestandardowych elementów sterujących.
Akcesoria interfejsu mapy
Pakiet Navigation SDK na Androida udostępnia elementy interfejsu, które pojawiają się podczas nawigacji, podobnie jak w aplikacji Mapy Google na Androida. Możesz dostosować widoczność lub wygląd tych elementów sterujących, jak opisano w tej sekcji. Zmiany, które tu wprowadzisz, zostaną odzwierciedlone podczas następnej sesji nawigacji.
Wskazówki dotyczące dopuszczalnych modyfikacji interfejsu nawigacji znajdziesz na stronie z zasadami.
Wyświetlanie kodu
Wyróżnianie miejsc docelowych i wejść
Gdy miejsce docelowe zostanie utworzone za pomocą placeID, budynek docelowy zostanie wyróżniony i w miarę możliwości wyświetli się ikona wejścia. Te wskazówki wizualne pomagają użytkownikom odróżnić miejsce docelowe i do niego dotrzeć.
Aby utworzyć miejsce docelowe z placeID, użyj metody Waypoint.Builder.setPlaceIdString().

Modyfikowanie nagłówka nawigacyjnego

Użyj NavigationFragment.setStylingOptions() lub NavigationView.setStylingOptions(), aby zmienić motyw nagłówka nawigacji i wskaźnika następnego skrętu, który pojawia się pod nagłówkiem, gdy jest dostępny.
Możesz ustawić te atrybuty:
| Typ atrybutu | Atrybuty |
|---|---|
| Kolor tła |
|
| Elementy tekstowe instrukcji |
|
| Elementy tekstowe dotyczące dalszych kroków |
|
| Ikony manewrów |
|
| Asystent pasa ruchu |
|
Poniższy przykład pokazuje, jak ustawić opcje stylów:
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));
Wyłączanie warstwy natężenia ruchu
Użyj metody GoogleMap.setTrafficEnabled(), aby włączyć lub wyłączyć warstwę natężenia ruchu na mapie. To ustawienie wpływa na informacje o natężeniu ruchu wyświetlane na mapie. Nie ma to jednak wpływu na wskazania natężenia ruchu na trasie wyznaczonej przez nawigatora.
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));
Sygnalizacja świetlna i znaki stopu

Podczas aktywnej nawigacji na mapie wyświetlane są sygnalizatory świetlne i znaki stopu, aby zapewnić użytkownikom więcej informacji o trasie i czekających ich manewrach. Od wersji 8.0.0 nie można wyłączyć tej funkcji.
Dodawanie niestandardowych znaczników
Pakiet Navigation SDK na Androida używa teraz interfejsów API Map Google do obsługi znaczników. Więcej informacji znajdziesz w dokumentacji interfejsu API Map Google.
Tekst pływający
Możesz dodać pływający tekst w dowolnym miejscu w aplikacji, o ile nie zasłania on informacji o źródle danych Google. Pakiet Navigation SDK nie obsługuje zakotwiczania tekstu do szerokości/długości geograficznej na mapie ani do etykiety. Więcej informacji znajdziesz w artykule Okna informacyjne.
wyświetlać ograniczenie prędkości,
Możesz automatycznie wyświetlać lub ukrywać ikonę ograniczenia prędkości. Użyj opcji NavigationView.setSpeedLimitIconEnabled() lub NavigationFragment.setSpeedLimitIconEnabled(), aby wyświetlić lub ukryć ikonę ograniczenia prędkości. Po włączeniu tej opcji ikona ograniczenia prędkości wyświetla się w dolnym rogu podczas nawigacji. Ikona wyświetla ograniczenie prędkości
na drodze, którą porusza się pojazd. Ikona pojawia się tylko w lokalizacjach,
w których dostępne są wiarygodne dane
dotyczące ograniczeń prędkości.
// Display the Speed Limit icon
mNavFragment.setSpeedLimitIconEnabled(true);
Ikona ograniczenia prędkości jest tymczasowo ukryta, gdy wyświetlany jest przycisk wyśrodkowania.
Ustawianie trybu nocnego
Możesz automatycznie kontrolować działanie trybu nocnego. Użyj metody NavigationView.setForceNightMode() lub NavigationFragment.setForceNightMode(), aby włączyć lub wyłączyć tryb nocny, albo pozwól, aby sterował nim pakiet Navigation SDK na Androida.
AUTO– pakiet Navigation SDK określa odpowiedni tryb na podstawie lokalizacji urządzenia i czasu lokalnego.FORCE_NIGHTwymusza włączenie trybu nocnego.FORCE_DAYwymusza tryb dzienny.
Poniższy przykład pokazuje, jak wymusić włączenie trybu nocnego we fragmencie nawigacji:
// Force night mode on.
mNavFragment.setForceNightMode(FORCE_NIGHT);
Wyświetlanie listy wskazówek dojazdu
Najpierw utwórz widok i dodaj go do hierarchii.
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));
}
Pamiętaj, aby przekazywać zdarzenia cyklu życia do DirectionsListView tak samo jak w przypadku NavigationView. Na przykład:
protected void onResume() {
super.onResume();
directionsListView.onResume();
}
Ukrywanie tras alternatywnych
Jeśli interfejs użytkownika jest przeładowany informacjami, możesz zmniejszyć ich ilość, wyświetlając mniej tras alternatywnych niż domyślne (2) lub nie wyświetlając ich wcale. Możesz skonfigurować tę opcję przed pobraniem tras, wywołując metodę RoutingOptions.alternateRoutesStrategy() z jedną z tych wartości typu wyliczeniowego:
| Wartość typu wyliczeniowego | Opis |
|---|---|
| AlternateRoutesStrategy.SHOW_ALL | Domyślny: Wyświetla maksymalnie 2 trasy alternatywne. |
| AlternateRoutesStrategy.SHOW_ONE | Wyświetla jedną trasę alternatywną (jeśli jest dostępna). |
| AlternateRoutesStrategy.SHOW_NONE | Ukrywa alternatywne trasy. |
Poniższy przykładowy kod pokazuje, jak całkowicie ukryć trasy alternatywne.
RoutingOptions routingOptions = new RoutingOptions();
routingOptions.alternateRoutesStrategy(AlternateRoutesStrategy.SHOW_NONE);
navigator.setDestinations(destinations, routingOptions, displayOptions);
Pasek postępu podróży

Pasek postępu podróży to pionowy pasek, który pojawia się po stronie początkowej/głównej mapy po rozpoczęciu nawigacji. Gdy ta opcja jest włączona, wyświetla się podsumowanie całej podróży wraz z miejscem docelowym i bieżącą pozycją użytkownika.
Dzięki temu użytkownicy mogą przewidzieć nadchodzące problemy, takie jak korki, bez konieczności powiększania widoku. W razie potrzeby może on zmienić trasę przejazdu. Jeśli użytkownik zmieni trasę, pasek postępu zostanie zresetowany, tak jakby w tym momencie rozpoczęła się nowa podróż.
Na pasku postępu podróży wyświetlane są te wskaźniki stanu:
Przebyta trasa – przebyty odcinek trasy.
Current position (Bieżąca pozycja) – bieżąca lokalizacja użytkownika podczas podróży.
Stan ruchu – stan ruchu na drodze przed Tobą.
Final destination (Ostateczny cel podróży) – ostateczny cel podróży.
Włącz pasek postępu podróży, wywołując metodę setTripProgressBarEnabled() w NavigationView lub NavigationFragment.
Na przykład:
// Enable the trip progress bar.
mNavFragment.setTripProgressBarEnabled(true);
Pozycjonowanie paska postępu podróży
- Lewa strona paska jest mniej więcej wyrównana z lewą stroną prędkościomierza, logo Google i przycisku Wyśrodkuj (gdy jest widoczny). Szerokość wynosi 12 dp.
- Pasek postępu podróży ma stałą wysokość. Aby dostosować się do ograniczeń przestrzeni pionowej na mniejszych urządzeniach, widoczność i wysokość paska postępu podróży dostosowują się do określonych punktów przerwania wysokości ekranu. Te punkty przerwania są niezależne od orientacji urządzenia i ilości miejsca, jaką mapa faktycznie zajmuje na ekranie:
- Jeśli pasek postępu podróży nakłada się na kartę skrętu lub inne elementy interfejsu nawigacji, pojawia się pod tymi elementami.
| Wysokość ekranu | Widoczność paska postępu podróży | Wysokość paska postępu podróży | Pozycja paska postępu podróży na osi Y |
|---|---|---|---|
| Mały: 0–551 dp | Niewidoczna | Nie dotyczy | Nie dotyczy |
| Średni: 552–739 dp | Widoczne | 130 dp | Nad elementami sterującymi po stronie początkowej (prędkościomierz / logo Google / przycisk Wyśrodkuj) |
| Duży: co najmniej 740 dp | Widoczne | 290 dp | Nad elementami sterującymi po stronie początkowej (prędkościomierz / logo Google / przycisk Wyśrodkuj) |
Kompas
Pakiet Navigation SDK udostępnia grafikę kompasu, która w określonych okolicznościach i tylko wtedy, gdy jest włączona, pojawia się w prawym górnym rogu mapy. Gdy użytkownik kliknie kompas, kamera wróci do pozycji z orientacją 0 (orientacja domyślna), a kompas po chwili zniknie.
Jeśli nawigacja jest włączona, a tryb kamery jest ustawiony na „śledzenie”, kompas pozostaje widoczny, a kliknięcie go powoduje przełączenie między perspektywą pochyloną a perspektywą przeglądu.
Aby uniknąć rozpraszania uwagi kierowcy, kompas pozostaje w tym samym miejscu, jeśli nagłówek (w trybie portretowym) rozszerza się i koliduje z domyślną pozycją kompasu. Jeśli dodasz dodatkowy niestandardowy element sterujący nagłówka lub widok akcesoriów nagłówka, kompas zostanie ukryty, aby uniknąć konfliktów interfejsu.
Kompas obsługuje tryby dzienny i nocny, a także tryb ciemny.
Kompas jest domyślnie włączony. Możesz określić, czy kompas jest włączony, za pomocą metody compassEnabled w klasie GoogleMapOptions.
Wyłączanie budynków 3D
W przypadku urządzeń o ograniczonej wydajności możesz wyłączyć wyświetlanie budynków 3D, wywołując metodę GoogleMap.setBuildingsEnabled(false).
Prompt Visibility API (eksperymentalny)
Interfejs Prompt Visibility API pozwala uniknąć konfliktów między elementami interfejsu generowanymi przez pakiet Navigation SDK a niestandardowymi elementami interfejsu. W tym celu dodaje detektor, który odbiera wywołanie zwrotne, zanim element interfejsu pakietu Navigation SDK ma się pojawić i zaraz po jego usunięciu. Więcej informacji, w tym przykładowe kody, znajdziesz w sekcji Prompt Visibility API na stronie Konfigurowanie zakłóceń w czasie rzeczywistym.