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>
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>
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"
/>
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.
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.
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);
Il suffit d'ajouter une ligne au format xml
app:itemIconTint="@color/white"
Ajoute ça
Android:tint="@color/colorPrimary"
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