关于BottomNavigationView设置在底部时的变形问

2018-06-19  本文已影响33人  柯基爱蹦跶

    这个控件作为Android原生的大弟子,有着很方便的操作性,来自于android.support:design包下,充斥着Material Design气息。但我在第一次用,就遇到了不解的问题------BottomNavigationView设置item数量三个以上会出现位移。这实际上是该控件的一个自带的动画效果,下面通过一个helper类解决。

默认情况下在res/menu下定义一个item_menu,它是显示在toolBar右侧的popMenu里.

item_menu(res/menu)

这是创建menu时的预览效果,我想要的是让它展示在底部,作为导航栏.于是我通过覆写onCreateOptionsMenu关联了item_menu,当然也可以直接在xml使用时添加menu属性.

话不多说,浏览器崩了好几次了,不展示图片效果了,直接上解决办法:


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

        }

}

}


这段代码直接使用,问题就解决了。通过反射机制修改“mShiftingMode”属性。

BottomNavigationViewHelper 类使用方法
上一篇下一篇

猜你喜欢

热点阅读