L'icona dell'elemento del cassetto di navigazione non mostra il colore originale


138

Sto cercando di mostrare un'icona accanto a un elemento nel mio menu per il mio cassetto di navigazione, ma per qualche ragione l'icona appare sempre in grigio anziché nel colore originale (marrone). Esiste un modo per impedire che ciò accada per mostrare il colore originale dell'icona?

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>

inserisci qui la descrizione dell'immagine


Cosa c'è nel tuo ic_browncircle?
Ye Lin Aung,

@YeLinAung Un cerchio marrone proprio come l'icona sopra accanto a "Sottotitolo 1" ma nel colore marrone, non grigio.
MacaronLover,

Forse puoi provare .setColorFilter(MY_BROWN_COLOR)a quella vista?
Ye Lin Aung,

Si prega di vedere la mia risposta qui sotto.
Ye Lin Aung,

Risposte:


350

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

Per evitare che il collegamento sia piuttosto semplice:

    mNavigationView.setItemIconTintList(null);

Questo disabilita tutta la colorazione basata sullo stato, ma puoi anche specificare anche il tuo elenco. Ha funzionato benissimo per me!

Ecco dove puoi ottenere i dettagli sulla creazione di un elenco di stati dei colori, ma è anche piuttosto semplice: 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>

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

11
Qualche alternativa XML per questo? Provato app:itemIconTint="@null"ma senza successo.
Mangesh,

Grazie, stavo iniziando ad avere mal di testa con questo problema
wax911,

4
mNavigationView.setItemIconTintList(null);Questa è la risposta che stavo cercando da tanto tempo ...
Jahid,

1
Dove usi il selettore?
John Sardinha,

49

Uso

    mNavigationView.setItemIconTintList(null);

è giusto. Inoltre, se tutte le tue icone in una combinazione di colori (avevo tutto bianco) puoi configurare tramite il file xml - app: itemIconTint = "@ android: color / white"

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


Questo funziona bene, mNavigationView.setItemIconTintList(null);rimuove iconTint predefinito da tutte le icone. Ora se hai la tua icona in colore rosso, sembrerebbe rossa, nessuna icona sarebbe applicata.
Syed Hissaan,

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 il mioic_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 te, ma non ha alcun effetto e non cambia 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.

inserisci qui la descrizione dell'immagine


Che dire di pre-lecca-lecca?
MacaronLover

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

4

Se si crea un progetto con il cassetto di navigazione che viene Android Studiofornito. Nella tua classe di attività principale, puoi semplicemente aggiungere questa riga di codice navigationView.setItemIconTintList(null);al tuo onCreatemetodo. Come questo;

 NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
 navigationView.setNavigationItemSelectedListener(this);
 navigationView.setItemIconTintList(null); // <----- HERE
 setupDrawerContent(navigationView);

3

Puoi provare a usare un disegno colorato, non sei sicuro che funzioni sotto 5.0.

Crea un disegno e aggiungi 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 poi cambia la tua voce di menu disegnabile con quella appena creata. Se ciò non funziona, non sono sicuro di altre soluzioni. Puoi provare questa libreria: https://github.com/mikepenz/MaterialDrawer Lo uso molto nei miei progetti.


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


1

Alcuni come questo codice non funziona MainActivity.java

                NavigationView.setItemIconTintList(null); // not working

così puoi usarlo.

MainActivity.java

 NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
   navigationView.setNavigationItemSelectedListener(this); 
   navigationView.setItemIconTintList(null); // <-- HERE add this code for icon color

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.