Couleur d'arrière-plan de changement dans BottomNavigationView
J'ai mis en œuvre BottomNavigationView
qui est disponible à partir de la nouvelle bibliothèque de prise en charge 25.0.0. Voici mon code pour que
<android.support.design.widget.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
app:itemBackground="@color/colorPrimary"
app:itemIconTint="@drawable/text"
app:itemTextColor="@drawable/text"
app:menu="@menu/bottom_navigation_main" />
Et text.xml
drawable
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@android:color/white" android:state_enabled="true" />
<item android:color="@color/colorPrimaryDark" android:state_enabled="false" />
</selector>
Avec ce code, je suis en mesure de changer la couleur du texte lorsque l'élément de menu est cliqué, mais quand j'applique la même chose pour app:itemBackground
il montre l'erreur <item> tag requires a 'drawable' attribute or child tag defining a drawable
.
C'est ce que j'ai essayé pour app:itemBackground
app:itemBackground="@drawable/text"
Donc ma question est comment puis-je changer la couleur d'arrière-plan de l'élément de menu sélectionné?
- Créer un drawable fichier et mettre à
app:itemBackground
. Selon BottomNavvigationView Doc Vous pouvez définir uniquement des ressources de l'arrière-plan . - essayez d'ajouter android:drawable="@drawable/item_background_selected" à l'intérieur de votre article
- oui c'est ce que j'ai fait, j'ai essayé
app:itemBackground="@color/colorPrimary"
qui est dessiné fichier seulement - Si c'est drawable alors vous devez écrire
app:itemBackground="@drawable/colorPrimary"
. - je l'ai aussi mentionné dans ma question, s'il vous plaît vérifier
but when i apply same thing to app:itemBackground it is showing error
- qui montre aussi la même erreur
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/item_background_selected" <item android:color="@android:color/white" android:state_enabled="true" /> <item android:color="@color/colorPrimaryDark" /> </selector>
quand vous le mettez dans votre texte xml toujours vous le procurer ?- oui même erreur
- c'est fait, on ne peut pas utiliser android:de la couleur pour
itemBackground
, nous devons utiliserandroid:drawable
dans les '<item>', votre réponse a été partiellement correcte. Mais nous ne pouvons pas ne pas inclure<item>
avecandroid:color
aussi, qui a généré l'erreur. - Rupareliya cool, j'étais avec mon mobile malades par ailleurs donner un meilleur coup 😛 :))
- Vérifiez ce manuel fr.proft.moi/2017/01/30/...
InformationsquelleAutor Ravi Rupareliya | 2017-01-02
Vous devez vous connecter pour publier un commentaire.
trouvé une réponse à partir de ce support post
android:state_checked
au lieu deandroid:state_enabled
onNavigationItemSelected
vous devez utiliserreturn true
au lieu dereturn false
.et à l'arrière-plan, nous ne pouvons pas utiliser
android:color
dans<item>
, nous avons besoin d'utiliserandroid:drawable
Alors, voici à quoi il ressemble fichier xml lorsque vous définissez pour
app:itemTextColor
etapp:itemIconTint
et de définir
app:itemBackground
sélecteur deIci
banner_white
etbanner_green
sont enregistrées au format png.android:drawable
attribut, comme ceandroid:drawable="@color/colorPrimary"
J'ai rencontré un problème similaire à l'OP, mais un peu différente. Si vous mettez qqch comme
@color/color_selector
dans le BottomNavigationView deapp:itemBackground="___"
. Il sera la cause de la vue afin de les masquer dans le panneau de conception, et à l'application de l'écraser lors du lancement. Bien que cela fonctionne bien si votre juste régler une couleur constante comme@color/black
.Pour une explication plus approfondie, j'ai creusé android de référence de l'api. Maintenant, je pense que j'ai trouvé la réponse que l'on peut raisonnablement résoudre ce problème. (Peut ne pas exact.)
Le problème est, ce que vous fournissez ne sont PAS EXACTEMENT ce qu'ils avaient demandé.
app:itemIconTint
etapp:itemTextColor
demander un hex de couleur, tandis queapp:itemBackground
demande un littéralement Drawable. Le<color>
éléments nous écrire encolors.xml
sont ColorDrawable. Il est dérivé de Drawable de sorte qu'il peut nourrir tous les trois attributs.Cependant, si vous changez d'utiliser un sélecteur, les choses deviennent différentes. Les deux hexadécimal de la couleur et de drawable correspondent à un sélecteur. Un sélecteur actes comme la ressource que vous avez mis en place, mais le résultat n'est pas celui d'origine. C'est plus comme un but unique wrapper. Vous ne pouvez pas nourrir un nombre hexadécimal de la couleur à un attribut qui nécessite un Drawable.
Le sélecteur de couleur est en fait un ColorStateList, fournit une couleur hexadécimale, réside dans
res/color
. Vous pouvez uniquement utiliser l'attributandroid:color
dans ce fichier. il vous invite à une erreur si vous écrivezandroid:drawable
.Le drawable sélecteur est StateListDrawable, fournit Drawable, réside dans
res/drawable
. Vous devriez écrireandroid:drawable
ici, mais il n'y a pas d'erreur si vous écrivezandroid:color
.Cependant
android:color
ne fournit qu'une couleur hexadécimale qui ne peut pas être reconnu comme un Drawable, tandis queapp:itemBackground
nécessite un Drawable, de sorte que l'application est vouée à l'échec. (Cause directe)L'attribut (
android:color
etandroid:drawable
) accepter un ColorDrawable, ici, il fonctionne exactement comme lorsque vous définissez une couleur constante.La solution (et la pratique) est:
Utilisation (et la seule)
android:drawable
dans unres/drawable/drawable_selector.xml
. Exemple:Utilisation
res/color/color_selector.xml
quand il a besoin d'une couleur hexadécimale (pour éviter la confusion). Exemple:Fournir
app:itemBackground
avec drawable. Exemple:(Intéressant de noter que si vous utilisez Android Studio, son auto-complétion vous dira quels sont les attributs sont légales et disponible, et il ne vous suggérons pas de
android:color
dans un sélecteur sousres/drawable
!)Essayez cela, il est un exemple de code de navigation, sélectionnez l'auditeur. espérons qu'il vous aide.
Solution Alternative:
Faire un drawable fichier highlight_color.xml avec le contenu suivant :
Faire un autre drawable fichier nav_item_drawable.xml avec le contenu suivant:
Enfin ajouter app:itemBackground balise dans le NavView :
ici la highlight_color.xml fichier définit une couleur unie drawable pour l'arrière-plan. Plus tard, cette couleur drawable est attribué à nav_item_drawable.xml sélecteur.
Essayer celui-ci.
d'abord créer xml bottom_navigation_items avec
deuxième: ajouter
app:itemBackground="@drawable/bottom_navigation_items"