2015-07-24 3 views
5

Im Moment versuche ich das DrawerLayout/NavigationView aus der neuen Design Support Bibliothek (22.2.1) in meine Anwendung zu implementieren. Ich habe bereits im Internet und vor allem bei stackoverflow gesucht, wie man ein MenuItem mit Icon und Title zu einem Untermenü hinzufügt. Ich weiß, dass es möglich ist, einen Menüeintrag mit einem Titel oder Symbol hinzuzufügen.Hinzufügen von MenuItem zu NavigationView mit Icon und Titel?

wie folgt aus:

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

Aber das ist nur ein MenuItem mit einem Titel, ohne Symbol. Ist es möglich, ein MenuItem mit einem Titel und Icon hinzuzufügen?

+0

Ok Sie können den Titel und das Symbol einfach hinzufügen, indem Sie xml wie eine gegebene Antwort verwenden. Aber wenn Sie es dynamisch hinzufügen, dann ist es derzeit ein Fehler in der Design-Support-Bibliothek ... http://Stackoverflow.com/a/30706233/3544839 – Moinkhan

+0

hey Moinkhan, in Ihrem Stackoverflow-Link wird nichts über die Möglichkeit erwähnt, ein MenuItem hinzuzufügen mit Icon und Titel. Es ist also nicht möglich, SubmenuItems programmatisch mit Icon und Title hinzuzufügen. – pimato

+0

Wenn Sie den Menüeintrag nicht hinzufügen können, ist es auch nicht möglich, ein Untermenü hinzuzufügen. Aber dieser Fehler ist als eine zukünftige Version markiert ..so ist es möglich, in einer zukünftigen Bibliothek .... für jetzt ist es nicht möglich, wie programmgesteuert .. – Moinkhan

Antwort

3

erstellen Menü als

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

hier Beispielanwendung ist

https://github.com/chrisbanes/cheesesquare

+2

Entschuldigung ich habe nie erwähnt, dass ich es programmgesteuert machen will. Deshalb habe ich nur Java-Code gepostet. – pimato

+0

Aber wie fügt man ein Symbol für die Sub-Elemente statt der einzelnen Menüpunkte hinzu? – worked

0

ich einfachen Weg gefunden Navigationsansicht ändern (Arbeit mit beiden Untermenü und Menü). Sie können NavigationView zur Laufzeit mit 2 Codezeilen neu aufblasen. In diesem Beispiel i mit new_navigation_drawer_items.xml wieder aufblasen, wenn der Benutzer erfolgreich angemeldet in

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

Wenn der Benutzer gerade wieder neu aufblasen ausloggen mit 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. 

So ist es tatsächlich Gegenstände wieder aufblasen, aber nicht hinzufügen neue Gegenstände zu existieren. Erstellen Sie einfach Ihre eigenen menu.xml

2

Für einen Menüpunkt grammatisch mit Symbol hinzufügen, müssen Sie zunächst ein Menü mit dem ID und Titel hinzufügen, um diese danach diesen Artikel erhalten

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

mit Verwendung von id und SetIcon .

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

Sie zuerst das Menü aus dem NavigationView erhalten:

Menu menu = mNavigationView.getMenu(); 

Dann wird Ihr Artikel zum Menü hinzufügen, erinnere mich an die Rückkehr MenuItem zu erhalten, so dass Sie das Symbol später hinzufügen:

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

Dieser Code funktioniert. Entwickler können verwirrt werden, wenn sie im Menü keine Methode finden, die String und Drawable hinzufügen würde. Die menu.add-Methode gibt jedoch das MenuItem zurück, mit demIcon und andere Eigenschaften festgelegt werden können. – Prashant