BottomNavigationView3个以上图标不显示文字

问题

当BottomNavigationView设置的菜单中超过三个图标时,出现只有焦点聚集到图标时才会显示底部设置的文字描述,当没有焦点聚集则只显示图标,效果如下: 

BottomNavigationView3个以上图标不显示文字_第1张图片

解决办法

设置labelVisibilityMode值

如果BottomNavigationItemView类并没有setShiftingMode方法
 

BottomNavigationView3个以上图标不显示文字_第2张图片


进入到BottomNavigationMenuView类中查看onMeasure方法,发现这个版本中判断方法已经改为isShifting
 

BottomNavigationView3个以上图标不显示文字_第3张图片


由isShifting方法可见,当labelVisibilityMode==0时或按钮数大于3则位移,那么只要将labelVisibilityMode值设置为不是0和-1就可以了。
 


在代码中直接设置labelVisibilityMode的值即可

bnvBottomNavigationView.setLabelVisibilityMode(1);

反射BottomNavigationViewHelper

因为官方的BottomNavigationView默认有个放大的ShiftingMode效果,但是尚未支持代码层级的切换。在3个menu item及以下时默认关闭,而到了4个及以上时默认开启,就会出现以上问题。

修改BottomNavigationMenuView的shiftMode属性
BottomNavigationMenuView的源码如下:

BottomNavigationView3个以上图标不显示文字_第4张图片

public class BottomNavigationViewHelper {public static void disableShiftMode(BottomNavigationView navigationView) {BottomNavigationMenuView menuView = (BottomNavigationMenuView) navigationView.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 itemView = (BottomNavigationItemView) menuView.getChildAt(i);itemView.setShiftingMode(false);itemView.setChecked(itemView.getItemData().isChecked());}} catch (NoSuchFieldException | IllegalAccessException e) {e.printStackTrace();}}
}

新版在xml文件中配置属性

app:labelVisibilityMode="labeled"

你可能感兴趣的:(Android开发技术,Bottom,NavigationView,3个以上图标不显示文字)