美文网首页
关于BottomNavigationView设置在底部时的变形问

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

作者: 柯基爱蹦跶 | 来源:发表于2018-06-19 11:45 被阅读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 类使用方法

    相关文章

      网友评论

          本文标题:关于BottomNavigationView设置在底部时的变形问

          本文链接:https://www.haomeiwen.com/subject/epmdhftx.html