Настройка пользовательского интерфейса навигации

Вы можете настроить элементы пользовательского интерфейса навигации и карты, а также добавить на карту собственные маркеры. На странице «Политики» приведены рекомендации по допустимым изменениям пользовательского интерфейса навигации.

Посмотреть код

Настройте заголовок навигации

Используйте NavigationFragment.setStylingOptions() или NavigationView.setStylingOptions() чтобы изменить тему заголовка навигации и индикатор следующего поворота, который появляется под заголовком, если он доступен.

Вы можете установить следующие атрибуты:

Тип атрибута Атрибуты
Фоновый цвет
  • Основной дневной режим — дневной цвет заголовка навигации.
  • Вторичный дневной режим - дневной цвет указателя следующего поворота.
  • Основной ночной режим — ночной цвет заголовка навигации.
  • Вторичный ночной режим — ночной цвет указателя следующего поворота.
Текстовые элементы для инструкций
  • Цвет текста
  • Шрифт
  • Размер текста первой строки
  • Размер текста второй строки
Текстовые элементы для следующих шагов
  • Шрифт
  • Цвет текста значения расстояния
  • Размер текста значения расстояния
  • Цвет текста единиц измерения расстояния
  • Размер текста единиц измерения расстояния
Значки маневров
  • Цвет большого значка маневра
  • Цвет маленького значка маневра
Наведение по полосе движения
  • Цвет рекомендуемой полосы или полос

В следующем примере показано, как установить параметры стиля:

private NavigationFragment mNavFragment;
mNavFragment = (NavigationFragment) 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));

Отключите слой трафика

Используйте NavigationMap.setTrafficEnabled() чтобы включить или отключить слой трафика на карте. Данная настройка влияет на показания плотности трафика, отображаемые на карте в целом, но не влияет на показания трафика на маршруте, проложенном навигатором.

private NavigationMap mMap;
// Get the map.
mMap = mNavFragment.getMap();
// Turn off the traffic layer on the map.
mMap.setTrafficEnabled(false);

Добавить пользовательские маркеры

Вы можете добавить на карту собственные маркеры, чтобы указать точки, представляющие интерес для вашего приложения или пользователей. Например, вы можете указать точку посадки в конце маршрута. Используйте NavigationMap.addMarker() , чтобы добавить маркер, и NavigationMap.setOnMarkerClickListener() , чтобы прослушивать нажатия на маркер.

В приведенном ниже коде используется значок, хранящийся в доступных для рисования ресурсах проекта, R.drawable.ic_person_pin_48dp . Вы можете использовать любое изображение, подходящее для вашего приложения.

// Place a marker at the final destination.
if (mNavigator.getCurrentRouteSegment() != null) {
    LatLng destinationLatLng = mNavigator.getCurrentRouteSegment()
        .getDestinationLatLng();

    Bitmap destinationMarkerIcon = BitmapFactory.decodeResource(
            getResources(), R.drawable.ic_person_pin_48dp);

    mMap.addMarker(new MarkerOptions()
            .position(destinationLatLng)
            .icon(destinationMarkerIcon)
            .title("Destination marker"));

    // Listen for a tap on the marker.
    mMap.setOnMarkerClickListener(new NavigationMap.OnMarkerClickListener() {
        @Override
        public void onMarkerClick(Marker marker) {
            displayMessage("Marker tapped: "
                    + marker.getTitle() + ", at location "
                    + marker.getPosition().latitude + ", "
                    + marker.getPosition().longitude);
        }
    });
}

В качестве маркера можно указать собственное изображение; но SDK в настоящее время не поддерживает маркировку этих изображений текстом. Дополнительную информацию см. в разделе Настройка маркеров .

Плавающий текст

Вы можете добавить плавающий текст в любом месте вашего приложения, если только не указана атрибуция Google. Navigation SDK не поддерживает привязку текста к широте и долготе на карте или к метке. Дополнительную информацию см. в разделе Информационные окна .

Отображение ограничения скорости

Вы можете программно показать или скрыть значок ограничения скорости. Используйте NavigationFragment.setSpeedLimitIconEnabled() , NavigationView.setSpeedLimitIconEnabled() или SupportNavigationFragment.setSpeedLimitIconEnabled() чтобы отобразить или скрыть значок ограничения скорости. Если эта функция включена, во время навигации в нижнем углу отображается значок ограничения скорости. Значок отображает ограничение скорости дороги, по которой движется автомобиль. Значок появляется только в тех местах, где доступны надежные данные об ограничении скорости.

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

Значок ограничения скорости временно скрыт, когда отображается кнопка возврата в центр.

Установить ночной режим

Вы можете программно управлять поведением ночного режима. Используйте NavigationFragment.setForceNightMode() , NavigationView.setForceNightMode() или SupportNavigationFragment.setForceNightMode() , чтобы включить или выключить ночной режим, или позвольте навигационному SDK управлять им.

  • AUTO Позволяет навигационному SDK определить подходящий режим в зависимости от местоположения устройства и местного времени.
  • FORCE_NIGHT включает ночной режим.
  • FORCE_DAY включает дневной режим.

В следующем примере показано принудительное включение ночного режима внутри фрагмента навигации:

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

Показать список направлений

Сначала создайте представление и добавьте его в свою иерархию.

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));
}

Обязательно пересылайте события жизненного цикла в DirectionsListView так же, как и в NaviagtionView. Например:

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

Скрытие альтернативных маршрутов

Когда пользовательский интерфейс перегружен слишком большим количеством информации, вы можете уменьшить беспорядок, отображая меньше альтернативных маршрутов, чем по умолчанию (два), или вообще не отображая альтернативные маршруты. Вы можете настроить эту опцию перед получением маршрутов, вызвав метод RoutingOptions.alternateRoutesStrategy() с одним из следующих значений перечисления:

Значение перечисления Описание
AlternateRoutesStrategy.SHOW_ALL По умолчанию. Отображает до двух альтернативных маршрутов.
AlternateRoutesStrategy.SHOW_ONE Отображает один альтернативный маршрут (если он доступен).
AlternateRoutesStrategy.SHOW_NONE Скрывает альтернативные маршруты.

Пример

В следующем примере кода показано, как полностью скрыть альтернативные маршруты.

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