2015-07-13 8 views
89

Sto tentando di mostrare un'icona accanto a un elemento all'interno del mio menu per il mio cassetto di navigazione, ma per qualche motivo l'icona appare sempre in grigio invece del colore originale (marrone). C'è un modo per evitare che ciò accada al fine di mostrare il colore originale dell'icona?L'icona dell'elemento del navigatore non mostra il colore originale

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

Cosa c'è nella tua 'ic_browncircle'? –

+0

@YeLinAung Un cerchio marrone simile all'icona sopra accanto a "Oggetto secondario 1" ma nel colore marrone, non grigio. – MacaronLover

+0

Forse puoi provare '.setColorFilter (MY_BROWN_COLOR)' a quella vista? –

risposta

220

ho trovato la risposta qui: https://stackoverflow.com/a/30632980/875249

Per evitare il link sua abbastanza semplice:

mNavigationView.setItemIconTintList(null); 

Disabilita tutto colorazione basato sullo stato, ma è possibile anche specificare la vostra lista pure. Ha funzionato benissimo per me!

Qui è dove è possibile ottenere i dettagli sulla creazione di una lista di stato di colore, ma la sua piuttosto semplice anche: 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

Funziona su pre-Lollipop? – MacaronLover

+0

Sì, l'ho provato su un Nexus 4 con API 17. Ho anche testato l'anteprima di Android M. ColorStateList è in giro da un po 'e NavigationView è parte della libreria di supporto quindi non vedo una ragione per cui questo non funzionerebbe fino a ICS e forse anche più indietro. – Chris

+8

Qualsiasi alternativa XML per questa? Provata? app: itemIconTint = "@ null" 'ma no . – Mangesh

3

Si può provare a utilizzare un disegnabile colorato, non è sicuro se funziona inferiore a 5,0.

Creare un drawable e aggiungere il seguente codice.

<?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"/> 

E quindi modificare la voce di menu estraibile a quella appena creata. Se ciò non funziona, non sono sicuro di altre soluzioni. Puoi provare questa libreria: https://github.com/mikepenz/MaterialDrawer La uso molto nei miei progetti.

+0

Questo metodo non funziona su API 17 (4.2). Il motivo (almeno nella mia esperienza) è che il cassetto di navigazione si sovrappone automaticamente a un'icona bianca con una tinta nera quando si mette in luce il tema. Quando rimuovo la luce dal mio tema le mie icone tornano bianche, come volevo che fossero. – Chris

5

Ho provato qualcosa di simile in una delle mie app. E sì, sembra che il colore dell'icona non cambi. Ma sono riuscito a fare un'altra soluzione. Ecco la mia 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> 

che credo sia qualcosa di simile a voi, ma non ha alcun effetto e non cambiare il colore.

Quindi quello che ho fatto è questo.

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

E sembra funzionare. Ecco il risultato.

enter image description here

+0

Che ne dici di pre-Lollipop? – MacaronLover

+0

Ho provato diverse soluzioni per pre-Lollipop. Finora, ancora nessuna fortuna :( –

26

Usa

mNavigationView.setItemIconTintList(null); 

è giusto.Anche se tutte le icone in uno schema di colori (avevo tutto bianco) è possibile impostare tramite file XML - app: itemIconTint = "@ Android: il colore/bianco"

Il mio caso:

<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

Sai come risolvere [questo altro problema?] (Http://stackoverflow.com/questions/39811505/mapview-not-returning-to-normal-state-after-clicking-toggle-switch) – MacaronLover

0

Proprio aggiungere una riga in xml

app:itemIconTint="@color/white"

Problemi correlati