Controlli personalizzati

Con i controlli personalizzati, puoi aggiungere i tuoi elementi dell'interfaccia utente sopra la visualizzazione di navigazione. L'SDK di navigazione riposiziona automaticamente i controlli personalizzati quando cambia il layout integrato.

Puoi impostare un controllo personalizzato per ogni posizione. Il controllo personalizzato può essere costituito da un solo elemento UI oppure, se il tuo design richiede più elementi, puoi utilizzare un elemento ViewGroup con più elementi UI.

Il metodo setCustomControl fornisce le posizioni come definite nell'enumerazione CustomControlPosition:

  • SECONDARY_HEADER (visualizzato solo in modalità verticale)
  • BOTTOM_START_BELOW
  • BOTTOM_END_BELOW

Nell'immagine di seguito puoi vedere esempi di ogni posizione nel posizionamento di un controllo UI che comunica al conducente la posizione di un passeggero.

Posizioni di controllo personalizzate

Aggiungi un controllo personalizzato sotto l'intestazione principale

Per impostazione predefinita, i layout mostrano una Freccia poi o un'indicazione delle corsie sotto l'intestazione principale. La tua app può sostituire il layout predefinito con un controllo personalizzato impostato nella posizione dell'intestazione secondaria. Questo controllo sostituisce i contenuti predefiniti nella visualizzazione di navigazione. Se la visualizzazione ha uno sfondo, quest'ultimo rimane posizionato. Quando l'app rimuove i contenuti personalizzati, i contenuti predefiniti verranno visualizzati al suo posto.

Questa posizione si trova sotto l'intestazione principale della mappa, con il bordo superiore allineato con il bordo inferiore dell'intestazione principale. L'intestazione secondaria predefinita è nascosta. Questa posizione è supportata solo in portrait mode. In landscape mode, l'intestazione secondaria non è disponibile e il layout non cambia.

  1. Crea una vista Android con l'elemento UI personalizzato o ViewGroup.
  2. Aumenta il codice XML o crea un'istanza della vista personalizzata per aggiungere un'istanza della vista come intestazione secondaria.
  3. Utilizza NavigationView.setCustomControl o NavigationFragment.setCustomControl con CustomControlPosition come SECONDARY_HEADER.

    L'esempio seguente crea un frammento e aggiunge un controllo personalizzato nella posizione dell'intestazione secondaria.

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

Rimuovere un'intestazione secondaria

Quando vuoi rimuovere l'intestazione secondaria e tornare ai contenuti predefiniti, utilizza il metodo setCustomControl.

  • Imposta la vista su null per rimuoverla.

    mNavFragment.setCustomControl(null, CustomControlPosition.SECONDARY_HEADER);
    

Aggiungere un controllo personalizzato nella parte superiore della visualizzazione di navigazione

La tua app può specificare un controllo personalizzato allineato al bordo inferiore della vista. Quando nell'app viene aggiunto il controllo personalizzato, il pulsante riposiziona il pulsante e il logo Google vengono spostati per ospitarlo.

  1. Crea una vista Android con l'elemento UI o il gruppo di visualizzazioni che vuoi aggiungere.
  2. Crea la visualizzazione di navigazione o il frammento.
  3. Richiama il metodo setCustomControl nella visualizzazione o nel frammento di navigazione e specifica il controllo e la posizione da utilizzare.

L'esempio seguente mostra un elemento View personalizzato aggiunto a 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);

Rimuovere un controllo personalizzato

Quando vuoi rimuovere il controllo personalizzato, utilizza il metodo setCustomControl e specifica la posizione del controllo da rimuovere.

  • Imposta la visualizzazione su null per quella posizione.

    mNavFragment.setCustomControl(null, CustomControlPosition.BOTTOM_END_BELOW);