13

Zaimplementowałem Dolny widok nawigacji z biblioteki wsparcia projektu 25 w moim projekcie. Mam 5 ikon w widoku. po wybraniu ikony pojawia się animacja. Ale gdy 3 lub mniej ikon nie pokazuje żadnych animacji. Chcę usunąć tę animację i potrzebuję tylko zmiany koloru ikony. Jak mogę to osiągnąć? Zrobiono wystarczająco dużo googlowania, ale nie udało się znaleźć rozwiązania. Proszę pomóż. Dzięki.Jak usunąć animację ikon dla dolnego widoku nawigacyjnego w Androidzie

+1

Możliwy duplikat [Jak wyłączyć Tryb przesunięcia BottomNavigationView?] (Https://stackoverflow.com/questions/40176244/how-to-disable-bottomnavigationview-shift-mode) –

Odpowiedz

66

otrzymałem odpowiedź od tego thread.

Aby usunąć animację lub tryb przesunięcia.

Implementacja BottomNavigationView ma warunek: gdy jest więcej niż 3 elementy, użyj trybu zmiany.

Tworzenie klasy pomocnika

import android.support.design.internal.BottomNavigationItemView; 
import android.support.design.internal.BottomNavigationMenuView; 
import android.support.design.widget.BottomNavigationView; 
import android.util.Log; 
import java.lang.reflect.Field; 

public class BottomNavigationViewHelper { 
    public static void disableShiftMode(BottomNavigationView view) { 
     BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0); 
     try { 
      Field shiftingMode = menuView.getClass().getDeclaredField("mShiftingMode"); 
      shiftingMode.setAccessible(true); 
      shiftingMode.setBoolean(menuView, false); 
      shiftingMode.setAccessible(false); 
      for (int i = 0; i < menuView.getChildCount(); i++) { 
       BottomNavigationItemView item = (BottomNavigationItemView) menuView.getChildAt(i); 
       //noinspection RestrictedApi 
       item.setShiftingMode(false); 
       // set once again checked value, so view will be updated 
       //noinspection RestrictedApi 
       item.setChecked(item.getItemData().isChecked()); 
      } 
     } catch (NoSuchFieldException e) { 
      Log.e("BNVHelper", "Unable to get shift mode field", e); 
     } catch (IllegalAccessException e) { 
      Log.e("BNVHelper", "Unable to change value of shift mode", e); 
     } 
    } 
} 

Wykorzystanie

BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_navigation_bar); 
BottomNavigationViewHelper.disableShiftMode(bottomNavigationView); 
+1

Witam, dziękuję za ten quetion i ans też działa to idealnie, ale nadal mam problem z kolorami ikon, moje domyślne ikony są czarne, ale wyświetlają się w kolorze jasnoniebieskim, a po kliknięciu ikony kolory zmieniają się na białe. jak rozwiązać? –

+0

Nie wiem, dlaczego to nie działa w mojej aplikacji :(Od kilku godzin borykam się z problemami – pamobo0609

+0

jak wyłączyć animację, która dzieje się po kliknięciu elementu, zasadniczo jest to animacja, która przypisuje dolny margines do ikony –

3

BottomNavigationViewEx jest dobrym rozszerzeniem standardowej BottomNavigationView. enableShiftingMode (false) wykonuje zadanie za Ciebie.