Commandes personnalisées

À l'aide de commandes personnalisées, vous pouvez ajouter vos propres éléments d'interface utilisateur au-dessus de la vue de navigation. Le SDK Navigation repositionne automatiquement vos commandes personnalisées lorsque la mise en page intégrée change.

Pour chaque position, vous pouvez définir une commande personnalisée. La commande personnalisée peut être un élément d'interface utilisateur ou, si votre conception en nécessite davantage, vous pouvez utiliser un ViewGroup avec plusieurs éléments d'interface utilisateur.

La méthode setCustomControl fournit les positions telles que définies dans l'énumération CustomControlPosition:

  • SECONDARY_HEADER (n'apparaît qu'en mode Portrait)
  • BOTTOM_START_BELOW
  • BOTTOM_END_BELOW

L'image ci-dessous présente des exemples de chaque position d'une commande d'interface utilisateur informant le conducteur de la position d'un passager.

Positions de contrôle personnalisées

Ajouter une commande personnalisée sous l'en-tête principal

Par défaut, les mises en page affichent une flèche vers l'avant ou un guide de voie sous l'en-tête principal. Votre application peut remplacer la mise en page par défaut par une commande personnalisée définie dans la position de l'en-tête secondaire. Cette commande remplace le contenu par défaut au-dessus de la vue de navigation. Si votre vue comporte un arrière-plan, celui-ci reste en place. Lorsque votre application supprime le contenu personnalisé, le contenu par défaut apparaît à sa place.

Cette position se trouve sous l'en-tête principal de la carte, le bord supérieur étant aligné sur le bord inférieur de l'en-tête principal. L'en-tête secondaire par défaut est masqué. Cette position n'est acceptée que dans portrait mode. Dans landscape mode, l'en-tête secondaire n'est pas disponible et la mise en page ne change pas.

  1. Créez une vue Android avec l'élément d'interface utilisateur personnalisé ou le ViewGroup.
  2. Gonflez le code XML ou instanciez la vue personnalisée pour obtenir une instance de la vue à ajouter comme en-tête secondaire.
  3. Utilisez NavigationView.setCustomControl ou NavigationFragment.setCustomControl avec CustomControlPosition en tant que SECONDARY_HEADER.

    L'exemple ci-dessous crée un fragment et ajoute une commande personnalisée dans la position de l'en-tête secondaire.

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

Supprimer un en-tête secondaire

Lorsque vous souhaitez supprimer l'en-tête secondaire et revenir au contenu par défaut, utilisez la méthode setCustomControl.

  • Définissez la vue sur "null" pour la supprimer.

    mNavFragment.setCustomControl(null, CustomControlPosition.SECONDARY_HEADER);
    

Ajouter une commande personnalisée au-dessus de la vue de navigation

Votre application peut spécifier une commande personnalisée alignée sur le bord inférieur de la vue. Lorsque votre application ajoute la commande personnalisée, le bouton de recentrage et le logo Google se déplacent vers le haut pour s'adapter à la commande personnalisée.

  1. Créez une vue Android avec l'élément d'interface utilisateur ou le groupe de vues que vous souhaitez ajouter.
  2. Créez la vue ou le fragment de navigation.
  3. Appelez la méthode setCustomControl sur la vue ou le fragment de navigation, puis spécifiez la commande et la position à utiliser.

L'exemple suivant montre un View personnalisé ajouté à un NavigationFragment:

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

Supprimer une commande personnalisée

Pour supprimer la commande personnalisée, utilisez la méthode setCustomControl et spécifiez sa position.

  • Définissez la vue sur null pour cette position.

    mNavFragment.setCustomControl(null, CustomControlPosition.BOTTOM_END_BELOW);