J'utilise la nouvelle bibliothèque Android Design Support pour implémenter un tiroir de navigation dans mon application.
Je n'arrive pas à comprendre comment changer la couleur d'un élément sélectionné!
Voici le xml du menu:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/navigation_item_1"
android:icon="@drawable/ic_1"
android:title="@string/navigation_item_1"/>
<item
android:id="@+id/navigation_item_2"
android:icon="@drawable/ic_2"
android:title="@string/navigation_item_2"/>
</group>
Et voici le navigationview xml qui est placé dans un android.support.v4.widget.DrawerLayout
:
<android.support.design.widget.NavigationView
android:id="@+id/activity_main_navigationview"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/drawer_header"
app:itemIconTint="@color/black"
app:itemTextColor="@color/primary_text"
app:menu="@menu/menu_drawer">
<TextView
android:id="@+id/main_activity_version"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginBottom="@dimen/activity_vertical_margin"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:textColor="@color/primary_text" />
</android.support.design.widget.NavigationView>
Merci de votre aide !
[EDIT] J'ai déjà examiné des solutions telles que celle-ci: Changer la couleur de fond du menu Android .
Cela semble être un hack et je pensais qu'avec la nouvelle bibliothèque de support de conception, quelque chose de plus propre aurait été introduit?
Réponses:
Eh bien, vous pouvez y parvenir en utilisant Color State Resource . Si vous remarquez
NavigationView
que vous utilisezIci, au lieu d'utiliser
@color/black
ou@color/primary_test
, utilisez unColor State List Resource
. Pour cela, créez d'abord un nouveauxml
répertoire (par exemple, tiroir_item.xml) dans lecolor
répertoire (qui devrait être à l'intérieur dures
répertoire.) Si vous n'avez pas déjà un répertoire nommécolor
, créez-en un.Maintenant à l'intérieur
drawer_item.xml
fais quelque chose comme çaLa dernière étape serait de changer votre
NavigationView
Comme cela , vous pouvez utiliser des ressources Liste séparée Couleur Etat pour
IconTint
,ItemTextColor
,ItemBackground
.Désormais, lorsque vous définissez un élément comme étant coché (soit dans
xml
ou par programme), l'élément particulier aura une couleur différente de celle non cochée.la source
Je crois
app:itemBackground
s'attend à un tirable. Suivez donc les étapes ci-dessous:Créez un fichier dessinable
highlight_color.xml
avec le contenu suivant:Créez un autre fichier dessinable
nav_item_drawable.xml
avec le contenu suivant:Enfin, ajoutez une
app:itemBackground
balise dans NavView:ici, le fichier highlight_color.xml définit une couleur unie pouvant être dessinée pour l'arrière-plan. Plus tard, cette couleur dessinable est assignée au sélecteur nav_item_drawable.xml.
Cela a fonctionné pour moi. J'espère que cela aidera.
********************************************** MISE À JOUR *** *******************************************
Bien que la réponse mentionnée ci-dessus vous donne un contrôle précis sur certaines propriétés, mais la façon dont je suis sur le point de décrire semble plus SOLIDE et un peu PLUS FRAÎCHE .
Donc, vous pouvez définir un ThemeOverlay dans le
styles.xml
pour le NavigationView comme ceci:appliquez maintenant ce ThemeOverlay à l'
app:theme
attribut de NavigationView, comme ceci:J'espère que cela aidera.
la source
android:background="@drawable/nav_item_drawable"
pour d'autres widgets comme RadioButton, Checkbox, Button, etc. Réduit la programmation bloatware pour la gestionsetOnCheckedChangeListener
juste pour la mise en évidence des couleurs.Il est nécessaire de définir la
NavigateItem
case à cocher true à chaqueNavigateView
clic sur l' élémentAjouter
NavigationItemSelectedListener
surNavigationView
la source
setChecked(true)
). Je peux voir la couleur de l'élément coché changer mais je ne peux pas le modifier moi-même, la couleur est toujours une version plus claire de l'arrière-plan de la vue de navigation.setChecked(true)
,View
change la couleur d'arrière-plan du thème que vous utilisez . Si vous changez l'arrière-plan de l'article en une autre couleur, vous devez gonfler votre mise en pageDrawerLayout
ouNavigationView
et la gérer vous-même.Voici une autre façon d'y parvenir:
}
la source
Voici comment vous pouvez le faire dans la méthode onCreate de votre activité:
la source
Étape 1: Créez un sélecteur coché / non coché:
selector.xml
Étape 2: utilisez l'attribut xml
app:itemTextColor
dans leNavigationView
widget pour sélectionner la couleur du texte.Étape 3:
Pour une raison quelconque, lorsque vous appuyez sur un élément du
NavigationView
menu, cela ne le considère pas comme une vérification de bouton. Vous devez donc faire cocher manuellement l'élément sélectionné et effacer l'élément précédemment sélectionné. Utilisez l'auditeur ci-dessous pour le faireÉtape 4:
Pour changer la couleur de l'icône, utilisez l'
app:iconTint
attribut dans lesNavigationView
éléments de menu et définissez-le sur le même sélecteur.Résultat:
la source