カスタム コントロール

カスタム コントロールを使用すると、ナビゲーション ビューの上に独自の UI 要素を追加できます。Navigation SDK は、組み込みレイアウトが変更されると、カスタム コントロールを自動的に再配置します。

位置ごとに 1 つのカスタム コントロールを設定できます。カスタム コントロールは 1 つの UI 要素にすることも、デザインでより多くの UI 要素を必要とする場合は、複数の UI 要素を含む ViewGroup を使用することもできます。

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

  • SECONDARY_HEADER(ポートレート モードでのみ表示)
  • BOTTOM_START_BELOW
  • BOTTOM_END_BELOW

以下の画像は、乗客の位置を運転手に知らせる UI コントロールの配置例です。

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

メイン ヘッダーの下にカスタム コントロールを追加する

デフォルトでは、レイアウトではプライマリ ヘッダーの下に [その後の矢印] または [車線案内] が表示されます。アプリでは、デフォルトのレイアウトを、セカンダリ ヘッダーの位置に設定したカスタム コントロールに置き換えることができます。このコントロールは、ナビゲーション ビューの上部にあるデフォルトのコンテンツに代わるものです。ビューに背景がある場合、その背景はそのまま残ります。アプリがカスタム コンテンツを削除すると、その場所にデフォルトのコンテンツが表示されます。

この位置は、メインの地図ヘッダーの下にあり、上端がメイン ヘッダーの下端と揃います。デフォルトのセカンダリ ヘッダーは非表示になります。この位置は portrait mode でのみサポートされています。landscape mode では、セカンダリ ヘッダーは使用できず、レイアウトは変更されません。

  1. カスタム UI 要素または ViewGroup を使用して Android ビューを作成します。
  2. XML をインフレートするか、カスタムビューをインスタンス化して、セカンダリ ヘッダーとして追加するビューのインスタンスを取得します。
  3. NavigationView.setCustomControl または NavigationFragment.setCustomControl を CustomControlPosition で SECONDARY_HEADER とともに使用します。

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

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

セカンダリ ヘッダーを削除する

セカンダリ ヘッダーを削除してデフォルトのコンテンツに戻すには、setCustomControl メソッドを使用します。

  • ビューを削除するには、ビューを null に設定します。

    mNavFragment.setCustomControl(null, CustomControlPosition.SECONDARY_HEADER);
    

ナビゲーション ビューの上部にカスタム コントロールを追加する

アプリでは、ビューの下端に沿って配置されるカスタム コントロールを指定できます。アプリがカスタム コントロールを追加すると、そのカスタム コントロールを収めるために、中央揃えボタンと Google ロゴが上に移動します。

  1. 追加する UI 要素またはビューグループを使用して、Android ビューを作成します。
  2. ナビゲーション ビューまたはフラグメントを作成します。
  3. ナビゲーション ビューまたはフラグメントで setCustomControl メソッドを呼び出し、コントロールと使用する位置を指定します。

次の例は、NavigationFragment に追加されたカスタム View を示しています。

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

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

カスタム コントロールを削除する場合は、setCustomControl メソッドを使用して、削除するコントロールの位置を指定します。

  • その位置のビューを null に設定します。

    mNavFragment.setCustomControl(null, CustomControlPosition.BOTTOM_END_BELOW);