195 votes

Couleur de l'onglet sélectionné dans la vue de navigation inférieure

Je vais ajouter une BottomNavigationView de un projet, et je voudrais avoir un texte différent (et icône de la teinte) couleur de l'onglet sélectionné (en vue de parvenir à un vieillissement de non-onglets sélectionnés effet). À l'aide d'une couleur différente avec android:state_selected="true" dans un sélecteur de couleur de fichier de ressource ne semble pas fonctionner. J'ai aussi essayé d'avoir d'autres entrées d'option avec android:state_focused="true" ou android:state_enabled="true", aucun effet malheureusement. Aussi essayé le réglage de l' state_selected attribut à false (explicitement) pour la valeur par défaut (non sélectionné) couleur, avec pas de chance.

Voici comment j'ai ajouter la vue à ma disposition:

<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/silver"
        app:itemIconTint="@color/bnv_tab_item_foreground"
        app:itemTextColor="@color/bnv_tab_item_foreground"
        app:menu="@menu/bottom_nav_bar_menu" />

Voici mon sélecteur de couleur (bnv_tab_item_foreground.xml):

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@android:color/darker_gray"  />
    <item android:state_selected="true" android:color="@android:color/holo_blue_dark" />
</selector>

Et mon menu de ressources (bottom_nav_bar_menu.xml):

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

    <item
        android:id="@+id/action_home"
        android:icon="@drawable/ic_local_taxi_black_24dp"
        android:title="@string/home" />
    <item
        android:id="@+id/action_rides"
        android:icon="@drawable/ic_local_airport_black_24dp"
        android:title="@string/rides"/>
    <item
        android:id="@+id/action_cafes"
        android:icon="@drawable/ic_local_cafe_black_24dp"
        android:title="@string/cafes"/>
    <item
        android:id="@+id/action_hotels"
        android:icon="@drawable/ic_local_hotel_black_24dp"
        android:title="@string/hotels"/>

</menu>

Je vous serais reconnaissant de toute aide.

376voto

Kamran Ahmed Points 522

Lors de la création de selector , conservez toujours l'état par défaut à la fin, sinon seul l'état par défaut serait utilisé. Vous devez réorganiser les éléments de votre sélecteur comme suit:

 <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:color="@android:color/holo_blue_dark" />
    <item android:color="@android:color/darker_gray"  />
</selector>
 

Et l'état à utiliser avec BottomNavigationBar est state_checked non state_selected .

108voto

Kishore Reddy Points 669

1. À l'intérieur de res créer un dossier avec le nom de la couleur (comme drawable)

2. Clic droit sur la couleur de dossier. Sélectionnez nouveau-> couleur de ressources fichier-> créer color.xml fichier (bnv_tab_item_foreground) (Figure 1: Structure De Fichier)

3. Copiez et collez bnv_tab_item_foreground

<android.support.design.widget.BottomNavigationView
            android:id="@+id/navigation"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginEnd="0dp"
            android:layout_marginStart="0dp"
            app:itemBackground="@color/appcolor"//diffrent color
            app:itemIconTint="@color/bnv_tab_item_foreground" //inside folder 2 diff colors
            app:itemTextColor="@color/bnv_tab_item_foreground"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:menu="@menu/navigation" />

bnv_tab_item_foreground:

 <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_checked="true" android:color="@color/white" />
        <item android:color="@android:color/darker_gray"  />
    </selector>

Figure 1: Structure De Fichier:

Figure 1: File Structure

76voto

dzikovskyy Points 2735

BottomNavigationView utilise colorPrimary à partir du thème appliqué pour l'onglet sélectionné. Vous pouvez donc créer un style avec la couleur primaire préférée et le définir comme thème pour votre BottomNavigationView dans un fichier de présentation XML.

styles.xml :

  <style name="BottomNavigationTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">@color/active_tab_color</item>
 </style>
 

votre_layout.xml :

 <android.support.design.widget.BottomNavigationView
            android:id="@+id/navigation"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="?android:attr/windowBackground"
            android:theme="@style/BottomNavigationTheme"
            app:menu="@menu/navigation" />
 

3voto

Abtin Gramian Points 730

Essayez d'utiliser android:state_enabled plutôt que android:state_selected pour les attributs d'élément de sélecteur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X