BottomNavigationView的特殊用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36707431/article/details/78870255


一、BottomNavigationView的使用规范:

1:官方建议item个数为3-5个 ,尝试6个会直接报错,尝试2个则不会报错,但是item是2个的话不建议使用改控件

2:底部导航栏的高度建议是56dp

二、给图标添加选择器效果:

直接在selector选择器中设置选中和未选中的图标样式,然后在设置该item的icon为刚设置的selector

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
       <item android:drawable="@mipmap/p1" android:state_checked="true"></item>
       <item android:drawable="@mipmap/p4" ></item>
</selector>

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/item_1"
        android:icon="@drawable/seletor_item1"      
        android:title="消息" />
</menu>

三、关于BottomNavigationView的ShiftingMode

当item数大于3个的时候,效果和三个的时候完全不同了,难以接受。。。查看源码,当item数大于3的时候会开启ShiftingMode效果,并没有任何属性和方法去修改ShiftingMode,只能我们通过反射来修改:

/**
 * 新建一个BottomNavigationView帮助者类
 */
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);
        }
    }
}

直接调用即可:

BottomNavigationViewHelper.disableShiftMode(mBottomNavigationView);


猜你喜欢

转载自blog.csdn.net/qq_36707431/article/details/78870255
今日推荐