web-dev-qa-db-fra.com

Icône d'élément du tiroir de navigation n'affichant pas la couleur d'origine

J'essaie d'afficher une icône à côté d'un élément de mon menu pour le tiroir de navigation, mais pour une raison quelconque, l'icône apparaît toujours en gris plutôt que la couleur d'origine (marron). Y a-t-il un moyen d'empêcher que cela se produise afin de montrer la couleur d'origine de l'icône?

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;
            }
        });
    }
}

tiroir_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

127
MacaronLover

J'ai trouvé la réponse ici: https://stackoverflow.com/a/30632980/875249

Pour éviter le lien, c'est assez simple:

    mNavigationView.setItemIconTintList(null);

Cela désactive toutes les teintes basées sur l'état, mais vous pouvez également spécifier votre propre liste. Cela a très bien fonctionné pour moi!

Voici où vous pouvez obtenir les détails sur la création d’une liste d’états de couleurs, mais c’est aussi très simple: 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>
318
Chris

Utilisation

    mNavigationView.setItemIconTintList(null);

c'est juste. Aussi, si toutes vos icônes dans un jeu de couleurs (j'avais tout blanc), vous pouvez configurer via un fichier xml - app: itemIconTint = "@ Android: couleur/blanc"

Mon cas:

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

J'ai essayé quelque chose de similaire dans l'une de mes applications. Et oui, il semble que la couleur de l'icône ne change pas. Mais j'ai réussi à faire avec une autre solution de contournement. Voici mon 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>

Ce qui, je crois, ressemble à quelque chose de similaire à vous mais cela n’a aucun effet et ne change pas la couleur.

Donc ce que j'ai fait est ceci.

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

Et cela semble fonctionner. Voici le résultat.

enter image description here

5
Ye Lin Aung

Vous pouvez essayer d'utiliser un dessin teinté, ne sachant pas si cela fonctionne en dessous de 5.0.

Créez un dessin et ajoutez le code suivant.

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

Puis changez l’élément de menu que vous pouvez dessiner pour celui que vous venez de créer. Si cela ne fonctionne pas, alors je ne suis pas sûr d'autres solutions. Vous pouvez essayer cette bibliothèque: https://github.com/mikepenz/MaterialDrawer Je l'utilise beaucoup dans mes projets.

3
Austin Hodak

Si vous créez un projet avec le tiroir de navigation fourni par le Android Studio. Dans votre classe d'activité principale, vous pouvez simplement ajouter cette ligne de code navigationView.setItemIconTintList(null); à votre méthode onCreate. Comme ça;

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

Il suffit d'ajouter une ligne au format xml

app:itemIconTint="@color/white"

1
Harsh Singhal

Ajoute ça

 Android:tint="@color/colorPrimary"
0

Certains comment ce code ne fonctionne pas MainActivity.Java

                NavigationView.setItemIconTintList(null); // not working

afin que vous puissiez l'utiliser.

MainActivity.Java

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