如何禁用BottomNavigationView移位模式?

BottomNavigationView不显示不活动的菜单标题。

如何在bottomNavigationBar中显示所有菜单元素的标题? 问题是在我的情况下只显示被点击的元素的标题。

在这里输入图像描述

BottomNavigationView实现有条件:当有超过3个项目,然后使用移位模式。

在这一刻,你不能通过现有的API来改变它,禁用移位模式的唯一方法就是使用reflection。

你需要帮助者类:

 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上应用disableShiftMode方法,但记住如果你从代码充气菜单视图,你必须在充气后执行它。

用法示例:

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

PS。

请记住,每次更改BottomNavigationView菜单项时都需要执行此方法。

UPDATE

您还需要更新proguardconfiguration文件(例如proguard-rules.pro),上面的代码使用reflection,如果proguard模糊mShiftingMode字段将不会工作。

 -keepclassmembers class android.support.design.internal.BottomNavigationMenuView { boolean mShiftingMode; } 

感谢穆罕默德阿尔法菲指出这个问题,并提供片段 。

要禁用文本animation,您还可以在您的dimens.xml文件中使用它:

 <dimen name="design_bottom_navigation_active_text_size">12sp</dimen> 

要禁用文本animation并减小字体大小,请在您的dimens.xml文件中使用以下代码:

 <dimen name="design_bottom_navigation_text_size">10sp</dimen> <dimen name="design_bottom_navigation_active_text_size">10sp</dimen>