J'aimerais créer un tiroir de navigation dans lequel chaque élément a une couleur de sélection différente (la teinte de l'icône et la couleur du texte), comme dans Google Play Store:
Je ne sais pas comment ils ont résolu ce problème, je pense qu'ils utilisent différentes activités avec différents tiroirs. Je souhaite utiliser des fragments et modifier la teinte de l'icône et la couleur du texte. Des idées comment je peux faire ceci? J'utilise la bibliothèque de support de conception de Google et une disposition de tiroir avec une vue de navigation à l'intérieur.
utilisez app:itemIconTint
dans votre NavigationView
pour les icônes et utilisez app:itemTextColor
pour textColors
Échantillon :
drawable/navigation_text_color
:
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<!-- This is used when the Navigation Item is checked -->
<item Android:color="#009688" Android:state_checked="true" />
<!-- This is the default text color -->
<item Android:color="#E91E63" />
</selector>
et layout
:
<Android.support.design.widget.NavigationView
.
.
app:itemTextColor="@drawable/navigation_text_color"/>
Si vous voulez dire dynamiquement par programmation, vous pouvez essayer ceci:
// FOR NAVIGATION VIEW ITEM TEXT COLOR
int[][] states = new int[][]{
new int[]{-Android.R.attr.state_checked}, // unchecked
new int[]{Android.R.attr.state_checked}, // checked
new int[]{} // default
};
// Fill in color corresponding to state defined in state
int[] colors = new int[]{
Color.parseColor("#747474"),
Color.parseColor("#007f42"),
Color.parseColor("#747474"),
};
ColorStateList navigationViewColorStateList = new ColorStateList(states, colors);
// apply to text color
navigationView.setItemTextColor(navigationViewColorStateList);
// apply to icon color
navigationView.setItemIconTintList(navigationViewColorStateList);
Vous pouvez donc définir plusieurs couleurs pour différents paramètres, tels que Jour ou Nuit.
<Android.support.design.widget.NavigationView
.
.
app:itemIconTint="@color/your_selector_file_name" // for Icon
app:itemTextColor="@color/your_selector_file_name" // for text
/>
Ajoutant à ce que @DAVOOD a dit. Le sélecteur de couleur ci-dessous a fonctionné pour moi.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<!-- This is used when the Navigation Item is checked -->
<item Android:color="@color/tenoBrandColor" Android:state_pressed="true" />
<!-- This is the default text color -->
<item Android:color="@color/textprimary" />
</selector>
Il existe une option plus simple pour les plus paresseux.
TL; DR: Créez simplement une nouvelle style
avec la colorPrimary
correspondant à la couleur souhaitée, puis définissez la NavigationView
's theme
sur cette nouvelle style
.
Il suffit de créer une nouvelle style
comme:
<style name="AppTheme.NoActionBar.NavigationView">
<item name="colorPrimary">@color/myDesiredColor</item>
</style>
Cette style
héritera automatiquement de votre theme
de base (dans mon cas, c'était AppTheme.NoActionBar
) et il vous suffira ensuite de définir la colorPrimary
avec votre couleur désirée.
Ensuite, il vous suffit de définir la variable NavigationView
's theme
comme suit:
Android:theme="@style/AppTheme.NoActionBar.NavigationView"
dans:
<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:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_menu_test"
app:menu="@menu/main_drawer"
Android:theme="@style/AppTheme.NoActionBar.NavigationView" />
Enfin j'ai eu la réponse,
Vous devez modifier colorAccent dans le fichier de couleurs, quelle que soit la couleur souhaitée:
<color name="colorAccent">whichever color required</color>
Cette solution a fonctionné pour moi