ナビゲーション UI を変更する

Navigation SDK for Android を使用すると、地図に表示する組み込みの UI コントロールと要素を指定して、地図のユーザー エクスペリエンスを変更できます。ナビゲーション UI の外観を調整することもできます。ナビゲーション UI の許容される変更に関するガイドラインについては、ポリシーのページをご覧ください。

このドキュメントでは、地図のユーザー インターフェースを変更する方法について、次の 2 つの方法で説明します。

地図の UI コントロール

ナビゲーション ビューにカスタム UI 要素を配置するには、地図の UI コントロールを使用して適切に配置します。組み込みのレイアウトが変更されると、Navigation SDK for Android はカスタム コントロールを自動的に再配置します。各位置に設定できるカスタム コントロール ビューは 1 つだけです。デザインで複数の UI 要素が必要な場合は、それらを ViewGroup に配置して setCustomControl メソッドに渡すことができます。

setCustomControl メソッド は、CustomControlPosition 列挙型で定義されている位置を提供します。

  • SECONDARY_HEADER(縦向きモードでのみ表示)
  • BOTTOM_START_BELOW
  • BOTTOM_END_BELOW
  • FOOTER
縦向きのカスタム コントロールの位置。
縦向きのカスタム コントロールの位置
横向きのカスタム コントロールの位置。
横向きのカスタム コントロールの位置

カスタム コントロールを追加する

  1. カスタム UI 要素または ViewGroup を使用して Android ビュー を作成します。
  2. XML を拡張するか、カスタムビューをインスタンス化して、ビューのインスタンスを取得します。
  3. NavigationView.setCustomControl または SupportNavigationFragment.setCustomControl を使用して、選択したカスタム コントロール の位置を CustomControlPosition 列挙型から指定します。

    次の例では、フラグメントを作成し、セカンダリ ヘッダーの位置にカスタム コントロールを追加します。

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

カスタム コントロールを削除する

カスタム コントロールを削除するには、null ビュー パラメータと選択したカスタム コントロールの位置を指定して setCustomControl メソッドを呼び出します。

たとえば、次のスニペットは、カスタムのセカンダリ ヘッダーを削除してデフォルトのコンテンツに戻します。

mNavFragment.setCustomControl(null, CustomControlPosition.SECONDARY_HEADER);

カスタム コントロールの位置

セカンダリ ヘッダー

縦向きのセカンダリ ヘッダーのカスタム コントロールの位置。
縦向きのセカンダリ ヘッダーのカスタム コントロールの位置

このカスタム コントロールの位置を使用するには、位置 CustomControlPosition.SECONDARY_HEADERsetCustomControl に渡します。

デフォルトでは、ナビゲーション モードの画面レイアウトには、プライマリ ヘッダーの下にセカンダリ ヘッダーの位置が用意されています。このセカンダリ ヘッダーは、車線案内など、必要な場合に表示されます。アプリでは、カスタム コンテンツにレイアウトのこのセカンダリ ヘッダーの位置を使用できます。この機能を使用すると、コントロールはデフォルトのセカンダリ ヘッダー コンテンツをカバーします。ナビゲーション ビューに背景がある場合、その背景はセカンダリ ヘッダーで覆われたままになります。 アプリがカスタム コントロールを削除すると、デフォルトのセカンダリ ヘッダーがその位置に表示されることがあります。

カスタムのセカンダリ ヘッダーの位置は、上端がプライマリ ヘッダーの下端に揃えられます。この位置は portrait mode でのみサポートされています。landscape mode では、セカンダリ ヘッダーは使用できず、レイアウトは変更されません。

下部開始

縦向きのカスタム コントロールの開始位置を下部に設定します。
縦向きの下部開始のカスタム コントロールの位置
横向きのカスタム コントロールの開始位置を下部に設定します。
横向きの下部開始のカスタム コントロールの位置

このカスタム コントロールの位置を使用するには、位置 CustomControlPosition.BOTTOM_START_BELOWsetCustomControl に渡します。

このカスタム コントロールの位置は、地図の下部開始の隅にあります。portrait modelandscape mode の両方で、ETA カードやカスタム フッターの上に配置されます(どちらも存在しない場合は地図の下部に沿って配置されます)。カスタム コントロール ビューの高さに合わせて、中央に戻るボタンや Google ロゴなどの Nav SDK 要素が上に移動します。このコントロールは表示されている地図の境界内に配置されるため、地図の下端または開始端に追加されたパディングによって、このコントロールの位置も変更されます。

下部終了

縦向きのカスタム コントロールの最下部の位置。
縦向きのカスタム コントロールの下端の位置
横向きのカスタム コントロールの最下部の位置。
横向きのカスタム コントロールの下端の位置

このカスタム コントロールの位置を使用するには、位置 CustomControlPosition.BOTTOM_END_BELOWsetCustomControl に渡します。

このカスタム コントロールの位置は、地図の下部終了の隅にあります。portrait mode では、ETA カードやカスタム フッターの上に配置されます(どちらも存在しない場合は地図の下部に沿って配置されます)。landscape mode では、地図の下部に揃えられます。終了側(LTR の場合は右側)に表示される Nav SDK 要素は、カスタム コントロール ビューの高さに合わせて上に移動します。このコントロールは表示されている地図の境界内に配置されるため、地図の下端または終了端に追加されたパディングによって、このコントロールの位置も変更されます。

縦向きのフッター カスタム コントロールの位置。
縦向きのフッターのカスタム コントロールの位置
横向きのフッター カスタム コントロールの位置。
横向きのフッターのカスタム コントロールの位置

このカスタム コントロールの位置を使用するには、位置 CustomControlPosition.FOOTERsetCustomControl に渡します。

このカスタム コントロールの位置は、カスタム フッター ビュー用に設計されています。Nav SDK の ETA カードが表示されている場合、このコントロールは ETA カードの上に配置されます。表示されていない場合は、地図の下部に揃えられます。BOTTOM_START_BELOW カスタム コントロールや BOTTOM_END_BELOW カスタム コントロールとは異なり、このコントロールは表示されている地図の境界外に配置されます。つまり、地図に追加されたパディングによって、このコントロールの位置が変更されることはありません。

portrait mode では、カスタム フッターは全幅になります。CustomControlPosition.BOTTOM_START_BELOWCustomControlPosition.BOTTOM_END_BELOW の両方の位置にあるカスタム コントロールと、中央に戻るボタンや Google ロゴなどの Nav SDK UI 要素は、カスタム コントロール フッターの上に配置されます。シェブロンのデフォルトの位置は、カスタム フッターの高さが考慮されます。

landscape mode では、カスタム フッターは半分の幅で、Nav SDK の ETA カードと同様に開始側(LTR の場合は左側)に揃えられます。CustomControlPosition.BOTTOM_START_BELOW の位置にあるカスタム コントロールと、中央に戻るボタンや Google ロゴなどの Nav SDK UI 要素は、カスタム コントロール フッターの上に配置されます。CustomControlPosition.BOTTOM_END_BELOW の位置にあるカスタム コントロールと、終了側(LTR の場合は右側)にある Nav SDK UI 要素は、地図の下部に揃えられます。カスタム フッターは地図の終了側まで拡張されないため、カスタム フッターが存在する場合でも、シェブロンのデフォルトの位置は変わりません。

CustomControlPosition.BOTTOM_START_BELOWCustomControlPosition.BOTTOM_END_BELOW の位置にあるカスタム コントロールと、中央に戻るボタンや Google ロゴなどの Nav SDK UI 要素は、カスタム コントロール フッターの上に配置されます。

地図の UI アクセサリ

Navigation SDK for Android には、Android 向け Google マップ アプリケーションと同様に、ナビゲーション中に表示される UI アクセサリが用意されています。このセクションで説明するように、これらのコントロールの表示設定や外観を調整できます。ここで設定した変更は、次のナビゲーション セッションで反映されます。

ナビゲーション UI の許容される変更に関するガイドラインについては、ポリシー のページをご覧ください。

コードを表示する

目的地と入り口のハイライト表示

placeID を使用して目的地を作成すると、可能な場合は常に、目的地の建物がハイライト表示され、入り口のアイコンが表示されます。これらの視覚的な手がかりは、ユーザーが目的地を区別してナビゲーションするのに役立ちます。

placeID を使用して目的地を作成するには、 Waypoint.Builder.setPlaceIdString() メソッドを使用します。

ナビゲーション ヘッダーを変更する

SupportNavigationFragment.setStylingOptions() または NavigationView.setStylingOptions() を使用して、ナビゲーション ヘッダーのテーマと、ヘッダーの下に表示される次のターン インジケーター(使用可能な場合)を変更します。

次の属性を設定できます。

属性タイプ属性
背景色
  • プライマリ デイモード - ナビゲーション ヘッダーの日中の色
  • セカンダリ デイモード - 次のターン インジケーターの日中の色
  • プライマリ ナイトモード - ナビゲーション ヘッダーの夜間の色
  • セカンダリ ナイトモード - 次のターン インジケーターの夜間の色
操作案内のテキスト要素
  • テキストの色
  • フォント
  • 1 行目のテキスト サイズ
  • 2 行目のテキスト サイズ
次のステップのテキスト要素
  • フォント
  • 距離値のテキストの色
  • 距離値のテキスト サイズ
  • 距離単位のテキストの色
  • 距離単位のテキスト サイズ
操作アイコン
  • 大きな操作アイコンの色
  • 小さな操作アイコンの色
車線案内
  • 推奨車線の色

次の例は、スタイリング オプションを設定する方法を示しています。

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

交通状況レイヤをオフにする

GoogleMap.setTrafficEnabled() を使用して、地図の交通状況レイヤを有効または無効にします。この設定は、地図全体に表示される交通量の密度に影響します。ただし、ナビゲーターによってプロットされたルートの交通状況には影響しません。

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

信号機と一時停止標識を有効にする

ナビゲーション中に地図に信号機と一時停止標識を表示できるようにすると、ルートと移動操作のコンテキストが追加されます。

デフォルトでは、Navigation SDK で信号機と一時停止標識は無効になっています。この機能を有効にするには、各機能に対して DisplayOptions を個別に呼び出します。

次の例は、信号機と一時停止標識を非表示にする方法を示しています。

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

カスタム マーカーを追加する

Navigation SDK for Android では、マーカーに Google Maps API が使用されるようになりました。詳しくは、 Maps API のドキュメント をご覧ください。

フローティング テキスト

Google の帰属表示を覆わない限り、アプリの任意の場所にフローティング テキストを追加できます。Navigation SDK では、地図上の緯度/経度またはラベルにテキストを固定することはできません。詳しくは、情報 ウィンドウをご覧ください。

制限速度を表示する

制限速度アイコンの表示 / 非表示はプログラムで切り替えることができます。 NavigationView.setSpeedLimitIconEnabled() または SupportNavigationFragment.setSpeedLimitIconEnabled() を使用して、制限速度アイコンの表示 / 非表示を切り替えます。有効にすると、案内中に制限速度アイコンが下隅に表示されます。アイコンには、車両が走行している道路の制限速度が表示されます。アイコンは、信頼できる制限速度データが利用可能な場所でのみ表示されます。

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

中央に戻るボタンが表示されている間は、制限速度アイコンは一時的に非表示になります。

夜間モードを設定する

夜間モードの動作はプログラムで制御できます。 NavigationView.setForceNightMode() または SupportNavigationFragment.setForceNightMode() を使用して、夜間モードのオン / オフを切り替えるか、Navigation SDK for Android に制御させます。

  • AUTO を指定すると、Navigation SDK がデバイスの位置情報と現地時間に基づいて適切なモードを決定します。
  • FORCE_NIGHT を指定すると、夜間モードが強制的にオンになります。
  • FORCE_DAY を指定すると、昼間モードが強制的にオンになります。

次の例は、ナビゲーション フラグメント内で夜間モードを強制的にオンにする方法を示しています。

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

ルートのリストを表示する

まず、ビューを作成して階層に追加します。

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

NavigationView の場合と同様に、ライフサイクル イベントを DirectionsListView に転送してください。次に例を示します。

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

別のルートを非表示にする

ユーザー インターフェースに情報が多すぎて煩雑になる場合は、デフォルト(2 つ)よりも少ない数の別のルートを表示するか、別のルートをまったく表示しないことで、煩雑さを軽減できます。このオプションは、ルートを取得する前に、次のいずれかの列挙値を指定して RoutingOptions.alternateRoutesStrategy() メソッドを呼び出すことで構成できます。

列挙値説明
AlternateRoutesStrategy.SHOW_ALL デフォルト。最大 2 つの別のルートを表示します。
AlternateRoutesStrategy.SHOW_ONE 別のルートが 1 つ表示されます(利用可能な場合)。
AlternateRoutesStrategy.SHOW_NONE 別のルートを非表示にします。

次のコード例は、別のルートを完全に非表示にする方法を示しています。

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

移動の進行状況バー

ナビゲーションに移動の進行状況バーが追加されました。

移動の進行状況バーは、ナビゲーションの開始時に地図の開始側/先頭側に表示される縦棒です。有効にすると、移動全体の概要と、ユーザーの目的地と現在地が表示されます。

を使用すると、ズームインしなくても、交通状況など、今後発生する可能性のある問題をすばやく予測できます。必要に応じて、移動のルートを変更できます。ユーザーが移動のルートを変更すると、その時点から新しい移動が開始されたかのように、進行状況バーがリセットされます。

移動の進行状況バーには、次のステータス インジケーターが表示されます。

  • 移動の経過時間 \- 移動の経過時間。

  • 現在地—移動中のユーザーの現在地。

  • 交通状況 \- 今後の交通状況。

  • 最終目的地 \- 移動の最終目的地。

移動の進行状況バーを有効にするには、setTripProgressBarEnabled() メソッド を NavigationView または SupportNavigationFragmentで呼び出します。 次に例を示します。

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

移動の進行状況バーの位置

  • バーの左側は、スピードメーター、Google ロゴ、中央に戻るボタン(表示されている場合)の左側とほぼ揃えられます。幅は 12 dp です。
  • 移動の進行状況バーの高さは固定されています。小さいデバイスでの縦方向のスペースの制限に対応するため、移動の進行状況バーの表示と高さは、画面の高さで指定されたブレークポイントに基づいて調整されます。これらのブレークポイントは、デバイスの向きや、地図が画面上で実際に占めるスペースとは無関係です。
  • 画面の高さ 移動の進行状況バーの表示 移動の進行状況バーの高さ 移動の進行状況バーの Y 軸位置
    小: 0 dp ~ 551 dp 非表示 なし なし
    中: 552 dp ~ 739 dp 表示 130 dp 開始側のコントロール(スピードメーター / Google ロゴ / 中央に戻るボタン)の上
    大: 740 dp 以上 表示 290 dp 開始側のコントロール(スピードメーター / Google ロゴ / 中央に戻るボタン)の上
  • 移動の進行状況バーがターンカードや他のナビゲーション UI 要素と重なっている場合は、他の要素の下に表示されます。

コンパス

Navigation SDK には、特定の状況下で地図の右上に表示されるコンパス グラフィックが用意されています。このグラフィックは、有効になっている場合にのみ表示されます。ユーザーがコンパスをクリックすると、カメラの方向がゼロの位置(デフォルトの向き)に戻る様子がアニメーション表示されてから、間もなくコンパスが消えます。

ナビゲーションが有効で、カメラモードが [追従] に設定されている場合、コンパスは表示されたままになり、コンパスをタップすると、カメラの視点が傾斜と概要の間で切り替わります。

ドライバーの注意散漫を避けるため、ヘッダー(縦向きモード)が拡大してコンパスのデフォルトの位置と競合する場合は、コンパスは同じ位置に留まります。セカンダリ ヘッダーのカスタム コントロールまたはヘッダー アクセサリ ビューを追加すると、UI の競合を避けるためにコンパスが非表示になります。

コンパスは、昼間モードと夜間モード、ダークモードをサポートしています。

コンパスはデフォルトで有効になっています。コンパスを有効にするかどうかは、 using the compassEnabled method on the GoogleMapOptions class.

建物の 3D 表示をオフにする

パフォーマンスが制約されているデバイスの場合は、建物の 3D 表示をオフにするには、 GoogleMap.setBuildingsEnabled(false) を呼び出します。

プロンプト表示 API(試験運用版)

プロンプト表示 API を使用すると、Navigation SDK によって生成された UI 要素と独自のカスタム UI 要素の競合を回避できます。Navigation SDK の UI 要素が表示される直前と、要素が削除された直後にコールバックを受け取るリスナーを追加します。コードサンプルなど、詳細については、 プロンプト表示 API のセクションをリアルタイムの障害を構成するページでご覧ください。