2016-04-19 6 views
0

Ich habe eine Navigationsleiste mit mehreren Menüpunkten. Ich versuche, das Menüsymbol und die Textfarbe eines der Menüelemente dynamisch zu ändern. Folgende Code ist in onCreate() einer der Aktivitätsklassen, die die Navigationsleiste haben:Einstellung der Symbole zu den Menüpunkten

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
navigationView.setNavigationItemSelectedListener(this); 
changeItemWiseTextProperties(navigationView.getMenu()); 

Und hier ist die Methodendefinition:

public void changeItemWiseTextProperties(Menu menu) { 
    menu.findItem(R.id.nav_testing). 
     setTitle(Html.fromHtml("<font color='#3b9ada'>Testing</font>")); 

    menu.findItem(R.id.nav_testing). 
     setIcon(ContextCompat.getDrawable(this,R.drawable.icon_testing_activated)); 
} 

Obwohl ich den Titelnamen und Schriftfarbe des Menüs einstellen erfolgreich, aber das Menüsymbol hat keine Auswirkungen. Ich kann das nicht ändern. Wieso ist es so?

+0

Verwendung invalidateOptionsMenu(); zum Aktualisieren des Menüs –

+0

@JhamanDas, versuchte das. Es hat nicht funktioniert. Ich habe es nach dem Setzen des Menüsymbols in der 'changeItemWiseTextProperties()' Methode platziert –

Antwort

0

checkte ich meinen Code und druckte die icon.toString() in den Protokollen: menu.findItem(R.id.nav_testing).getIcon().toString()

vor und nach programmatisch auf das Menüsymbol zu ändern: menu.findItem(R.id.nav_testing).getIcon()...

Ergebnisse? Ich habe zwei verschiedene Werte bekommen. Das bedeutet, dass das Symbol geändert wurde. Aber warum wurde die Änderung nicht im Menü angezeigt?

Grund: Ich hatte zwei Symbole - identisch in jedem Aspekt außer der Farbe. Anfangs war es icon_testing (graue Farbe) und ich setzte es dann auf icon_testing_activated (blaue Farbe).

Grau war die Standardfarbe des nicht ausgewählten Menüelements, während Blau die Standardfarbe für einen ausgewählten Menüeintrag war. Da der Menüeintrag, für den ich das blau gefärbte Symbol (icon_testing_activated) eingestellt hatte, nicht ausgewählt war, wurde er auf die nicht ausgewählte Standardfarbe - grau - zurückgesetzt. Und da die beiden Symbole bis auf die Farbe identisch waren, dachte ich, dass die Methode setIcon() nicht funktionierte.

Lösung: Ich habe programmatisch der Menüpunkt für die ich die Farbveränderung tat:

menu.findItem(R.id.nav_testing).setChecked(true); 
Verwandte Themen