7

Dodałem BottomNavigationView w mojej aplikacji jak.Android: Widok z dołu nawigacji - zmiana ikony wybranego elementu

main.xml

<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="@color/white" 
     app:itemTextColor="@color/white" 
     app:menu="@menu/bottom_navigation_main" /> 

bottom_navigation_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:id="@+id/action_favorites" 
     android:enabled="true" 
     android:icon="@drawable/ic_favorite_white_24dp" 
     android:title="@string/text_favorites" 
     app:showAsAction="ifRoom" /> 
    <item 
     android:id="@+id/action_schedules" 
     android:enabled="true" 
     android:icon="@drawable/ic_access_time_white_24dp" 
     android:title="@string/text_schedules" 
     app:showAsAction="ifRoom" /> 
    <item 
     android:id="@+id/action_music" 
     android:enabled="true" 
     android:icon="@drawable/ic_audiotrack_white_24dp" 
     android:title="@string/text_music" 
     app:showAsAction="ifRoom" /> 
</menu> 

główną działalność kliknij

bottomNavigationView.setOnNavigationItemSelectedListener(
     new BottomNavigationView.OnNavigationItemSelectedListener() { 
      @Override 
      public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
       switch (item.getItemId()) { 
        case R.id.action_favorites: 
         //need change icon of favotites here. 
        case R.id.action_schedules: 

        case R.id.action_music: 

       } 
       return true; 
      } 
     }); 

Chcę zmienić ikonę dolnej nawigacji wybranej pozycji. Jak możemy osiągnąć tę funkcję, gdy użytkownik kliknie jeden element?

(jeśli użytkownik kliknął jedną rzecz to zmiana ikony na inną)

Odpowiedz

7

Trzeba przywrócić ikonę onclick, a następnie w przypadku przełącznika trzeba ustawić tylko jedno z nich trzeba zmienić, więc tylko wtedy, gdy wybrana ikona zmieni się.

Menu menu = bottomNavigationView.getMenu(); 
menu.findItem(R.id.action_favorites).setIcon(favDrawable); 

switch (item.getItemId()) { 
       case R.id.action_favorites: 
        item.setIcon(favDrawableSelected); 
       case R.id.action_schedules: 
       case R.id.action_music: 
      } 
+0

Myślę, że byłoby użyteczne, aby wyraźnie dodać ten kawałek kodu, deklarując również "element". MenuItem item = menu.findItem (R.id.action_favorites); – larrytech

+0

Spróbuję tego kodu to działa, ale kiedy klikam inną ikonę, to nie jest ustawiona domyślna ikona, taka jak wypełnij ikonę lub nie wypełniaj ikony –

1

znalazłem odpowiedź. możemy użyć

item.setIcon(R.drawable.icon_name) 

zmienić ikonę .. spróbuje imporve odpowiedź

bottomNavigationView.setOnNavigationItemSelectedListener(
      new BottomNavigationView.OnNavigationItemSelectedListener() { 
       @Override 
       public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
        switch (item.getItemId()) { 
         case R.id.action_favorites: 
          //change the icon 
         item.setIcon(R.drawable.icon_name); 
         case R.id.action_schedules: 

         case R.id.action_music: 

        } 
        return true; 
       } 
      }); 
12

można po prostu stworzyć selektor rozciągliwej w rozciągliwej folderu i obraz może być zmiana według stanu widget stosowanego w widoku

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/calender_green" android:state_checked="true"/> 
    <item android:drawable="@drawable/calender_black" android:state_checked="false"/> 
</selector> 
+7

Działa to lepiej niż metoda programowa. Stan do określenia jest w rzeczywistości "android: state_checked", a nie "android: state_selected" – Yuntao

+0

Gdzie zastosować to? –

0

Tworzenie selektora i określić rozciągliwej dla każdego stanu (np sprawdzone i stany haczyka)

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/calender_green" android:state_checked="true"/> 
    <item android:drawable="@drawable/calender_black" android:state_checked="false"/> 
</selector> 
+1

wygląda na to, że nie działa –

3

Jeśli powyższe rozwiązania nie działają, aby zmienić wybraną ikonę elementu następnie dodać poniżej linii kodu:

bottomNavigationView.setItemIconTintList(null); 

Spowoduje to wyłączenie efektu tinty ikony wybranego elementu.

Miałem ten sam problem. Dodałem możliwość wyboru do zmiany ikony elementu BottomNavigationView, gdy jest zaznaczona/zaznaczona.

+0

Działa dobrze Thnx. –