13

Я реализовал нижний вид навигации из библиотеки поддержки дизайна 25 в моем проекте. У меня есть 5 значков в представлении. всякий раз, когда выбран значок, у него есть анимация. Но когда 3 или меньше значков не показывают никаких анимаций. Я хочу удалить эту анимацию и вам потребуется только изменение цвета для значка. Как я могу это достичь? Сделано достаточно googling, но не смог найти решение. Пожалуйста помоги. Благодарю.Как удалить анимацию значков для отображения нижней навигации в android

+1

Возможный дубликат [Как отключить режим сдвига BottomNavigationView?] (Https://stackoverflow.com/questions/40176244/how-to-disable-bottomnavigationview-shift-mode) –

ответ

66

получил ответ от этого thread.

Чтобы удалить анимацию или режим смены.

Внедрение BottomNavigationView имеет условие: при использовании более трех предметов используется режим сдвига.

Создать вспомогательный класс

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

Использование

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

привет, благодарю вас за этот quetion и ans тоже, это работает идеально, но я все еще борется с цветом значков, мои по умолчанию значки черные, но он светится черным, и когда я нажимаю значок, он превращается в белый цвет .. как решить? –

+0

Я не знаю, почему это не работает в моем приложении :(Я боюсь часами сейчас – pamobo0609

+0

Как отключить анимацию, которая происходит при нажатии на элемент. В основном это анимация, которая назначает нижнее дополнение к значку –

3

BottomNavigationViewEx является хорошим дополнением к стандартной BottomNavigationView. enableShiftingMode (false) выполняет эту работу за вас.