2016-10-30 13 views
60

Dodaję nowy BottomNavigationView z Biblioteki projektów materiałowych do projektu i chciałbym mieć inny kolor tekstu (i odcienia ikony) dla wybranej zakładki (w celu uzyskania wyszarzenia nie - wybrany efekt kart). Używanie innego koloru z android:state_selected="true" w pliku zasobów selektora kolorów wydaje się nie działać. Próbowałem również mieć dodatkowe pozycje pozycji z android:state_focused="true" lub android:state_enabled="true", niestety niestety niestety efekt. Próbowano także ustawić atrybut state_selected na false (jawnie) dla domyślnego (niewybranego) koloru, bez powodzenia.Kolor wybranej zakładki w widoku nawigacji z dołu

Oto jak dodać widok do mojego układu:

<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" /> 

Oto mój wybór kolorów (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> 

A mój zasób menu (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> 

Byłbym wdzięczny za każdą pomoc.

Odpowiedz

155

Podczas tworzenia selector zawsze należy zachować stan domyślny na końcu, w przeciwnym razie używany będzie tylko stan domyślny. Trzeba zmienić kolejność elementów w selektor jak:

<?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> 

i państwo mają być używane z BottomNavigationBar jest state_checked nie state_selected.

+17

dodać go na karenms

+1

W moim przypadku potrzebne do generowania dynamicznych menu , a to rozwiązanie nie działa. Jedynym działającym rozwiązaniem było ręczne ustawienie pozycji menu http://stackoverflow.com/a/7106111/2098878 –

+0

Dziękuję bardzo, to działało dla mnie. –

0

Spróbuj użyć android:state_enabled zamiast android:state_selected dla atrybutów pozycji selektora.

+0

Jak wspomniano w pytaniu, próbowałem również state_enabled, ale to nie jest poprawny atrybut stanu, który ma być używany z tym konkretnym widgetem. Chodziło o to, co zostało wspomniane w odpowiedzi: 1. Zamówienie było błędne (domyślny stan powinien być ostatnim elementem w selektorze) 2. state_checked jest poprawnym atrybutem stanu, który ma być używany z BottomNavigationView. – Metallica

4
<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" /> 

1. Inside res create folder with name color(like drawable) 
2. right click on color folder select new->colorresourcefile-> create color.xml(bnv_tab_item_foreground) file 
3. copy and paste it this(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> 

its working fine no issues 
Powiązane problemy