2015-07-24 41 views
5

In questo momento sto cercando di implementare DrawerLayout/NavigationView dalla nuova libreria di supporto di progettazione (22.2.1) nella mia applicazione. Ho già cercato su Internet e in particolare su StackOverflow come aggiungere un MenuItem a un sottomenu con icone e titolo. So che è possibile aggiungere un menu con un'icona o.Aggiungi MenuItem a NavigationView con icona e titolo?

così:

 Menu m = mNavigationView.getMenu(); 
     m.add(R.id.groupID,R.id.menuItemID,orderNumber,"title"); 

Ma questa è solo una MenuItem con un titolo senza icona. E 'possibile aggiungere un oggetto Menu con un titolo e Icona?

+0

Ok Si può facilmente aggiungere il titolo e l'icona usando xml come risposta data. Ma se lo aggiungi dinamicamente, al momento è un bug nella libreria di supporto alla progettazione ... http://stackoverflow.com/a/30706233/3544839 – Moinkhan

+0

hey Moinkhan, nel tuo link StackOverflow non è menzionato nulla sulla possibilità di aggiungere un MenuItem con icona e titolo. Quindi non è possibile aggiungere sottomenutems con icona e titolo a livello di codice? – pimato

+0

Se non è possibile aggiungere la voce di menu, non è possibile aggiungere anche il sottomenu. Ma questo bug è contrassegnato come una futura release .. quindi è possibile in una futura libreria .... per ora non è possibile come programmaticamente .. – Moinkhan

risposta

3

creare menu come

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

<item 
    android:id="@+id/nav_home" 
    android:icon="@drawable/ic_dashboard" 
    android:title="Home" /> 

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

qui è app campione

https://github.com/chrisbanes/cheesesquare

+2

scusate non ho mai detto che voglio farlo a livello di programmazione. Ecco perché ho postato solo il codice java. – pimato

+0

Ma come aggiungere un'icona per le voci secondarie, invece di ciascuna voce di menu? – worked

0

ho trovato modo più semplice per cambiare immagine navigazione (lavoro sia con sottomenu e menu). È possibile rigonfiare NavigationView in fase di esecuzione con 2 righe di codice. In questo esempio i rigonfiare con new_navigation_drawer_items.xml quando l'utente loggato

navigationView.getMenu().clear(); //clear old inflated items. 
navigationView.inflateMenu(R.menu.logged_in_navigation_drawer_items); //inflate new items. 

successo Quando l'utente di log out appena ri-gonfiare di nuovo con logged_out_navigation_drawer_items.xml

navigationView.getMenu().clear(); //clear old inflated items. 
navigationView.inflateMenu(R.menu.logged_out_navigation_drawer_items); //inflate new items. 

Così è in realtà ri-gonfiare articoli, ma non aggiungere nuovi oggetti per esistere. Basta creare il proprio menu.xml

2

Per aggiungere una voce di menu grammaticalmente con l'icona, è necessario aggiungere prima un menu con id e titolo, utilizzando questa

menu.add(groupId, menuItemId, Order, "title"); 

dopo questo ottenere questo elemento utilizzando id e setIcon .

menu.findItem(menuItemId).setIcon(R.drawable.ic_add_black); 
9

prima ottenere il menu dal NavigationView:

Menu menu = mNavigationView.getMenu(); 

Allora aggiungi la tua voce al menu, ricordare per ottenere il ritorno Menultem in modo da poter aggiungere l'icona più tardi:

MenuItem item = menu.add(groupId, menuItemId, Order, "Menu Item 1 Title"); 
item.setIcon(R.drawable.ic_some_menu_item_icon); // add icon with drawable resource 
+0

Questo codice funziona. Gli sviluppatori potrebbero essere confusi quando non trovano alcun metodo in Menu che dice aggiungere String e Drawable. Ma il metodo menu.add restituisce il MenuItem che abilita setIcon e altre proprietà. – Prashant