7

Ich habe BottomNavigationView in meiner Anwendung wie hinzugefügt.Android: Bottom Navigation View - Symbol des ausgewählten Elements ändern

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> 

MainActivity klicken

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; 
      } 
     }); 

Ich möchte das Symbol der unteren Navigation der ausgewählten Position ändern. Wie können wir diese Funktion erreichen, wenn der Benutzer auf ein Element klickt?

(wenn der Benutzer ein Element dann das Symbol Wechsel auf einen anderen angeklickt)

Antwort

7

Sie müssen imporve das Symbol Onclick zurückgesetzt, und dann auf den Schalter Fall müssen Sie nur die von Ihnen festgelegt müssen geändert werden, also nur wenn das Symbol geändert wird.

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

Ich denke, es wäre hilfreich, explizit den Teil des Codes hinzuzufügen, der auch 'item' deklariert. MenuItem item = menu.findItem (R.id.action_favorites); – larrytech

+0

Ich werde versuchen, diesen Code, es ist Arbeit, aber wenn ich auf ein anderes Symbol, dann ist es nicht gesetzt Standard-Symbol wie das Symbol füllen oder nicht füllen –

1

die Antwort gefunden. können wir verwenden

item.setIcon(R.drawable.icon_name) 

das Symbol zu ändern .. versuchen, Antwort

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

Sie können einfach ziehbar Wähler in ziehbar Ordner erstellen und Bild kann entsprechend dem Zustand des Widgets im Blick

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

Dies funktioniert besser als die programmatische Methode. Der zu spezifizierende Zustand ist eigentlich "android: state_checked" und nicht "android: state_selected" – Yuntao

+0

Wo soll ich das anwenden? –

0

einen Selektor erstellen verwendet Veränderung sein, und geben Sie ziehbar für jeden Zustand (zB geprüft und ungehemmt Staaten)

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

scheint es funktioniert nicht –

3

Wenn die oben genannte Lösungen arbeiten nicht für Sie ausgewähltes Element Symbol ändern dann unterhalb der Linie, um Ihren Code hinzufügen:

bottomNavigationView.setItemIconTintList(null); 

Dadurch wird der Farbtoneffekt des ausgewählten Symbols deaktiviert.

Ich hatte das gleiche Problem. Ich habe eine Auswahl hinzugefügt, um das Symbol des BottomNavigationView-Objekts zu ändern, wenn es aktiviert/ausgewählt ist.

+0

Gut funktioniert Thnx. –

Verwandte Themen