J'ai un problème étrange avec le tiroir de navigation. J'ai créé le tiroir de navigation à l'aide du modèle par défaut fourni avec Android Studio et il l'a créé à l'aide du fichier menu.xml. Maintenant, le problème est que chaque fois que j'ajoute une image à l'élément de liste du tiroir de navigation, sa couleur devient grise malgré toute image en couleur. voici une image du tiroir de navigation

icon

Comme vous pouvez le voir, la couleur de l'image est verte, mais lorsqu'elle est ajoutée au tiroir de navigation, elle ressemble à Tiroir de navigation

Je ne sais pas ce qui cause ça

Voici menu.xml

    <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <group android:checkableBehavior="single">
        <item
            android:id="@+id/nav_camera"
            android:icon="@drawable/clock"
            android:title="Home" />
        <item
            android:id="@+id/nav_gallery"
            android:icon="@drawable/mega_event"
            android:title="Mega Events" />
        <item
            android:id="@+id/nav_slideshow"
            android:icon="@drawable/tickets"
            android:title="My Tickets" />
        <item
            android:id="@+id/nav_manage"
            android:icon="@drawable/profile"
            android:title="Profile" />
        <item
            android:id="@+id/nav_settings"
            android:icon="@drawable/settings"
            android:title="Settings" />
        <item
            android:id="@+id/nav_logout"
            android:icon="@drawable/logout"
            android:title="Logout" />
    </group>

</menu>

Ici, le dessinable dans le premier élément est celui que j'ai posté

Et thème d'activité

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
</style>

Et classe d'activité du tiroir de navigation

    public class ActivityNavigationDrawer extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {
    FragmentManager mFragmentManager;
    FragmentTransaction mFragmentTransaction;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_navigation_drawer);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.setDrawerListener(toggle);
        toggle.syncState();

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setBackgroundColor(Color.parseColor("#FFFFFF"));
        navigationView.setNavigationItemSelectedListener(this);
        mFragmentManager = getSupportFragmentManager();
        mFragmentTransaction = mFragmentManager.beginTransaction();
        mFragmentTransaction.replace(R.id.containerView,new FragmentTabs()).commit();
    }

    @Override
    public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        return true;
    }

    @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        if (id == R.id.nav_camera) {
            // Handle the camera action
        } else if (id == R.id.nav_gallery) {

        } else if (id == R.id.nav_slideshow) {

        } else if (id == R.id.nav_manage) {

        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
}
6
Vivek Mishra 3 janv. 2016 à 20:40

6 réponses

Meilleure réponse

Vous pouvez utiliser directement app:itemIconTint pour le changement de couleur de l'icône et app:itemTextColor pour le changement de couleur d'élément de texte dans la vue de navigation.

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- Content Layout -->
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/adView"
        android:layout_below="@id/my_awesome_toolbar" />

    <!-- Navigation Drawer -->
    <android.support.design.widget.NavigationView
        android:id="@+id/navigation"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:itemIconTint="#FF0000"
        app:itemTextColor="#D2691E"
        app:menu="@menu/navigation_menu" />
</android.support.v4.widget.DrawerLayout>
7
Rohit Suthar 4 janv. 2016 à 19:10

Vous devez créer les fichiers de sélecteur XML suivants comme navigation_item_icon.xml dans votre répertoire res/color/ pour la teinte de l'icône du menu de navigation

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- NORMAL -->
    <item android:color="@color/navigation_item_iconColor" android:state_checked="false" />
    <!-- CHECKED -->
    <item android:color="@color/navigation_item_iconColor_selected" android:state_checked="true" />
</selector>

Créez navigation_item_text.xml dans votre répertoire res/color/ pour la teinte de couleur du texte de l'élément de menu de navigation.

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- NORMAL -->
    <item android:color="@color/navigation_item_textColor" android:state_checked="false" />
    <!-- CHECKED -->
    <item android:color="@color/navigation_item_textColor_selected" android:state_checked="true" />
</selector>

Ensuite, vous devez utiliser navigation_item_icon.xml et navigation_item_text.xml dans votre vue de navigation comme teinte.

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- Content Layout -->
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/adView"
        android:layout_below="@id/my_awesome_toolbar" />

    <!-- Navigation Drawer -->
    <android.support.design.widget.NavigationView
        android:id="@+id/navigation"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:itemBackground="@android:color/transparent"
        app:itemIconTint="@color/navigation_item_icon"
        app:itemTextColor="@color/navigation_item_text"
        app:menu="@menu/navigation_menu" />
</android.support.v4.widget.DrawerLayout>
4
Rohit Suthar 4 janv. 2016 à 07:03

Vous pouvez utiliser setItemTextColor et setItemIconTintList pour définir la teinte de la couleur du texte et la teinte de la couleur de l'icône sur l'élément de NavigationDrawer, ces méthodes définissent la couleur sur n'importe quel état de l'élément de NavigationDrawer. Pour utiliser ces méthodes, ajoutez d'abord ce code à la fin de onCreateView:

    int[][] states = new int[][]{
            new int[]{-android.R.attr.state_checked},// unchecked state
            new int[]{android.R.attr.state_checked}, // checked state
    };

    int[] colors = new int[]{
            ContextCompat.getColor(this, R.color.colorPrimary),
            ContextCompat.getColor(this, R.color.colorPrimaryDark)
    };

    ColorStateList colorStateList = new ColorStateList(states, colors);
    navigationView.setItemTextColor(colorStateList);
    navigationView.setItemIconTintList(colorStateList);

Ce code définit la couleur sur un état non vérifié et un état vérifié. Vous pouvez définir la couleur sur d'autres états.

Le tableau de couleurs et le tableau d'état doivent avoir un nombre égal de membres. Vous pouvez sélectionner la couleur que vous voulez. Vous pouvez utiliser la classe Color ou comme l'exemple de ressource d'utilisation. Dans ce lien, vous pouvez trouver la liste des états disponibles developer.android.

2
Fred 4 janv. 2016 à 06:02

Utilisez ceci -

      navigationView.setItemIconTintList(null);
1
Akash Bisariya 16 juin 2016 à 09:50

Il peut être plus facile d'utiliser des sélecteurs. Le code de la question SO suivante avec une modification mineure est tout ce dont vous avez besoin pour effectuer les changements de couleur: Les sélecteurs de la vue de navigation ne se comportent pas correctement

Remplacez simplement android:state_selected par android:state_checked

0
Community 23 mai 2017 à 11:53

Vous essayez activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <include layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />



    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        app:itemTextColor="@color/white"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:itemTextAppearance="@style/TextAppearance.AppCompat.Medium"
        android:fitsSystemWindows="true"
        app:itemIconTint="@drawable/nav_menu_item_color"
        android:background="#414144"
        app:headerLayout="@layout/nav_header_main"
        app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:menu="@menu/activity_main_drawer" />




</android.support.v4.widget.DrawerLayout>

Et vous setDrawer dans activity_main_drawer

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <group android:checkableBehavior="single">
        <item android:title="">

        <item android:id="@+id/nav_camara"
            android:icon="@drawable/sidemenu_home_active_icn"
            android:title="HOME"

            app:actionLayout="@layout/layout_my_switch"
            />
        </item>

        <item android:id="@+id/nav_gallery" android:icon="@drawable/sidemenu_news_inactive_icn"
            android:title="NEWS"

            app:actionLayout="@layout/layout_my_switch2"
            />

        <item android:id="@+id/nav_slideshow" android:icon="@drawable/sidemenu_ssotv_inactive_icn"
            android:title="SSO TV" />
        <item android:id="@+id/nav_manage" android:icon="@drawable/sidemenu_about_inactive_icn"
            android:title="COMICS" />
        <item android:id="@+id/nav_manage_1" android:icon="@drawable/sidemenu_member_inactive_icn"
            android:title="MEMBER" />
        <item android:id="@+id/nav_card" android:icon="@drawable/sidemenu_card_inactive_icn"
        android:title="CARD" />
        <item android:id="@+id/nav_map" android:icon="@drawable/sidemenu_map_inactive_icn"
            android:title="MAP" />
        <item android:id="@+id/nav_setting" android:icon="@drawable/sidemenu_about_inactive_icn"
            android:title="SETTING" />
    </group>

    <item android:title="Communicate">
        <menu>
            <item android:id="@+id/nav_share" android:icon="@android:drawable/ic_menu_share"
                android:title="Share" />
            <item android:id="@+id/nav_send" android:icon="@drawable/sidemenu_close_btn"
                android:title="SIGN OUT" />
        </menu>
    </item>

</menu>
0
Pong Petrung 22 avril 2016 à 10:52