2015-07-21 7 views
7

Quando definiamo un NavigationView con una sezione con voci di sottomenu. Si lasciò allinea gli elementi secondari con il titolo della sezione:Come modificare il rientro di voci di sottomenu in un NavigationView?

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

<item android:title="Sub items"> 
    <menu> 
     <item 
      android:title="Sub item 1" /> 
     <item 
      android:title="Sub item 2" /> 
    </menu> 
</item> 
</menu> 

enter image description here

Ho provato ad aggiungere un'immagine trasparente con la dimensione corretta al pad:

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

<item android:title="Sub items"> 
    <menu> 
     <item 
      android:icon="@drawable/ic_transparent" 
      android:title="Sub item 1" /> 
     <item 
      android:icon="@drawable/ic_transparent" 
      android:title="Sub item 2" /> 
    </menu> 
</item> 
</menu> 

enter image description here

Ma default NavigationView:

  1. Aggiunge un'imbottitura fissa tra l'icona del testo
  2. impone un fix del formato carta sul icona stessa

non riuscivo a trovare come configurare questo imbottiture né la dimensione delle icone.

Domanda Come possiamo modificare il rientro dell'elemento secondario in modo che i sottovoci siano più rientrati?

Preferisco eseguire la pulizia tramite un attributo piuttosto che inserire immagini trasparenti.

+0

Ciao, hai trovato una soluzione per questo? – Noundla

+0

Non ancora. Non ho esaminato questo da quando l'ho pubblicato. Hai bisogno di concludere altri lavori con priorità più alta. Ma sto iniziando a pensare che forse non è il design migliore avere la rientranza, dopotutto non l'ho visto raccomandato nelle linee guida sul material design. Lo esaminerò di nuovo nelle prossime due settimane. Quindi pubblicherò un aggiornamento allora. –

+0

@Noundla Dopo averlo esaminato di nuovo, non ho trovato il modo di farlo. La mia opinione corrente su questo è che l'indentazione non è promossa all'interno delle linee guida sul material design, quindi non la considero una best practice in Android, quindi mi sto allontanando da esso. Invece, un approccio migliore consiste nell'utilizzare i colori di sfondo e di primo piano di ogni riga di menu per indicare il raggruppamento. L'ho visto ben fatto in un certo numero di app. Per tua informazione, ciò che intendo per colore in primo piano è il colore del testo. È anche possibile integrare tipi di carattere per enfatizzare aspetti diversi del raggruppamento e dello stato. –

risposta

2

Non sono sicuro se hai ricevuto la risposta ma ho avuto lo stesso problema e ho finito con l'uso di MaterialDrawer - https://github.com/mikepenz/MaterialDrawer.

È necessario estendere il SecondaryDrawerItem e aggiungere il padding su bindView onPostBindView.

drawer = new DrawerBuilder() 
      .withActivity(this) 
      .withHeader(drawerHeader) 
      .withSavedInstance(savedInstanceState) 
      .addDrawerItems(
        new PrimaryDrawerItem().withName("Item1"), 
        new CustomSecondaryDrawerItem().withName("SubItem1"), 
        new CustomSecondaryDrawerItem().withName("SubItem2") 
      ) 
      .build(); 

CustomDrawerSecondaryItem.java

public class CustomSecondaryDrawerItem extends SecondaryDrawerItem { 

    @Override 
    public void onPostBindView(IDrawerItem drawerItem, View view) { 

     Context ctx = view.getContext(); 

     int paddingLeft = ctx.getResources().getDimensionPixelSize(R.dimen.drawer_secondary_item_padding_left); 
     view.setPadding(paddingLeft, view.getPaddingTop(), view.getPaddingRight(), view.getPaddingBottom()); 

     super.onPostBindView(drawerItem, view); 

    } 
} 
8

responsabilità

Vedi il mio commento al Noundla sulla questione principale, in cui spiego il motivo per cui penso che il rientro non è l'approccio giusto.

risposta

Detto questo, se si must hanno indentazione il modo più semplice è quello di pad ciascuna voce di menu con gli spazi. Questo non è l'ideale, ma è semplice da implementare, comprendere e sostituire quando è disponibile un'opzione migliore. E funziona con il built-in Android NavigationView senza dover introdurre librerie esterne:

Ecco il codice di esempio che funziona:

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:title="Sub items"> 
    <menu> 
     <item android:title="&#160;&#160;&#160;&#160;Sub item 1" /> 
     <item android:title="&#160;&#160;&#160;&#160;Sub item 2" /> 
    </menu> 
    </item> 
</menu> 

Spero che questo consente di risparmiare qualcuno là fuori tempo.

Problemi correlati