2015-07-13 24 views
89

Ich versuche ein Symbol neben einem Element in meinem Menü für meine Navigationsleiste anzuzeigen, aber aus irgendeinem Grund erscheint das Symbol immer in Grau und nicht in der Originalfarbe (braun). Gibt es eine Möglichkeit dies zu verhindern, um die Originalfarbe des Icons zu zeigen?Navigationselementsymbol zeigt keine Originalfarbe an

MainActivity.java

public class MainActivity extends AppCompatActivity { 

    private DrawerLayout mDrawerLayout; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 

     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     if (navigationView != null) { 
      setupDrawerContent(navigationView); 
     } 
    } 

    private void setupDrawerContent(NavigationView navigationView) { 
     navigationView.setNavigationItemSelectedListener(
       new NavigationView.OnNavigationItemSelectedListener() { 
      @Override 
      public boolean onNavigationItemSelected(MenuItem menuItem) { 
       mDrawerLayout.closeDrawers(); 

       return true; 
      } 
     }); 
    } 
} 

drawer_view.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:title="Section"> 
     <menu> 
      <item 
       android:id="@+id/navigation_item_1" 
       android:icon="@drawable/ic_browncircle" 
       android:title="Sub item 1" /> 
     </menu> 
    </item> 
</menu> 

enter image description here

+0

Was ist in Ihrem 'ic_browncircle' ist? –

+0

@YeLinAung Ein brauner Kreis, genau wie das Symbol oben neben "Unterpunkt 1", aber in der Farbe braun, nicht grau. – MacaronLover

+0

Vielleicht können Sie '.setColorFilter (MY_BROWN_COLOR)' zu dieser Ansicht versuchen? –

Antwort

220

fand ich die Antwort hier: https://stackoverflow.com/a/30632980/875249

Um den Link seine recht einfach zu vermeiden:

mNavigationView.setItemIconTintList(null); 

Dieser alle zustandsbasierten Tönungs deaktiviert, aber Sie können auch Ihre eigene Liste angeben auch. Es hat super für mich funktioniert!

Hier ist, wo Sie die Informationen zum Erstellen einer Farbzustandsliste zu bekommen, aber es ist ziemlich einfach zu: http://developer.android.com/reference/android/content/res/ColorStateList.html

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item android:state_checked="true" android:color="@color/primary" /> 
     <item android:state_checked="false" android:color="@android:color/white" /> 
    </selector> 
+0

Funktioniert es auf Pre-Lollipop? – MacaronLover

+0

Ja, ich habe es auf einem Nexus 4 mit API 17 getestet. Ich habe auch auf der Android M Vorschau getestet. ColorStateList gibt es schon eine Weile und NavigationView ist Ich sehe keinen Grund, warum dies nicht bis zum ICS funktioniert und möglicherweise sogar noch weiter zurück – Chris

+8

Irgendwelche XML-Alternative für diese? Versuchte 'app: itemIconTint =" @ null "' aber nein Erfolg – Mangesh

3

Sie können versuchen, eine getönte ziehbar verwenden, nicht sicher, ob es unter 5.0 funktioniert.

Erstellen Sie einen Zeichensatz und fügen Sie den folgenden Code hinzu.

<?xml version="1.0" encoding="utf-8"?> 
<bitmap 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@drawable/ic_browncircle" 
    android:tint="@color/brownColor"/> 

Und dann ändern Sie Ihren Menüeintrag auf den, den Sie gerade erstellt haben. Wenn das nicht funktioniert, bin ich mir keiner anderen Lösung sicher. Sie können diese Bibliothek versuchen: https://github.com/mikepenz/MaterialDrawer Ich benutze es sehr in meinen Projekten.

+0

Diese Methode funktioniert nicht auf API 17 (4.2). Der Grund (zumindest in meiner Erfahrung) ist, dass die Navigationsleiste ein weißes Symbol automatisch mit einem schwarzen Farbton überlagert, wenn Ihr Thema auf hell eingestellt ist. Wenn ich das Licht von meinem Thema entferne, kehren meine Symbole zu Weiß zurück, wie ich es beabsichtigt hatte. – Chris

5

Ich habe etwas ähnliches in einer meiner App versucht. Und ja, es scheint, dass sich die Farbe des Icons nicht ändert. Aber ich habe es mit einem anderen Workaround geschafft. Hier ist mein ic_browncircle.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval" 
    android:tint="@color/brown" 
    > 
    <size 
     android:height="3dp" 
     android:width="3dp" 
     /> 
    <solid android:color="@color/brown"/> 
</shape> 

die ich glaube, etwas Ähnliches zu Ihnen ist, aber es keine Wirkung hat und nicht die Farbe ändern.

Also was ich getan habe, ist dies.

navigationView.getMenu() 
    .findItem(R.id. navigation_item_1) 
    .getIcon() 
    .setColorFilter(Color.parseColor("#b69260"), PorterDuff.Mode.SRC_ATOP); 

Und es scheint zu funktionieren. Hier ist das Ergebnis.

enter image description here

+0

Wie wäre es mit Pre-Lollipop? – MacaronLover

+0

Ich habe mehrere Lösungen für Pre-Lollipop versucht. Bisher noch kein Glück :( –

26

Verwenden

mNavigationView.setItemIconTintList(null); 

es ist richtig.Auch Wenn alle Symbole in einem Farbschema (ich hatte alle weiß) Sie können Setup durch XML-Datei - App: itemIconTint = "@ android: Farbe/weiß"

Mein Fall:

<android.support.design.widget.NavigationView 
    android:id="@+id/nav_view" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:clickable="true" 
    app:headerLayout="@layout/nav_header_main" 
    app:itemTextColor="@android:color/white" 
    app:menu="@menu/activity_main_drawer" 
    android:background="@android:color/black" 
    app:itemIconTint="@android:color/white" 
    /> 
+0

Wissen Sie, wie Sie [dieses andere Problem lösen?] (Http://stackoverflow.com/questions/39811505/mapview-not-returning-to-normal-state-after-clicking-toggle-switch) – MacaronLover

0

Nur eine Zeile in xml hinzufügen

app:itemIconTint="@color/white"