API28 BottomNavigationView 去除位移方式 Android篇——程序员之路

BottomNavigationView按钮超过3个会产生位置移动的效果,这是BottomNavigationView自带的特效

API28 之前

在API28 以前 可以通过 以下方法取消位移

public void disableShiftMode(BottomNavigationView navigationView) {

BottomNavigationMenuView menuView = (BottomNavigationMenuView) navigationView.getChildAt(0);

    try {

// 利用反射,改变 item 中 mShiftingMode 的值 ,从而改变 BottomNavigationView 默认的效果

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

    }

}

然后,每次 获取 BottomNavigationView 的时候 调用该方法。


BottomNavigationView navigation = findViewById(R.id.navigation);

disableShiftMode(navigation);

悲催的是 API28 取消了 setShiftingMode 方法,不能再使用这样的方式了。

API28 新方式

方式一:

XML:BottomNavigationView 中添加 app:labelVisibilityMode="labeled" 属性
<android.support.design.widget.BottomNavigationView .

        .

        app:labelVisibilityMode="labeled" />
JAVA: 然后在java代码中 .setLabelVisibilityMode(LabelVisibilityMode.LABEL_VISIBILITY_LABELED);
BottomNavigationView navigation = findViewById(R.id.navigation);

navigation.setLabelVisibilityMode(LabelVisibilityMode.LABEL_VISIBILITY_LABELED);

方式二: 跟 API28之前的方式类似

@SuppressLint("RestrictedApi")
public static void removeNavigationShiftMode(BottomNavigationView view) { 

 BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0); menuView.setLabelVisibilityMode(LabelVisibilityMode.LABEL_VISIBILITY_LABELED);

 menuView.buildMenuView();

}

愉快的解决了!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,180评论 4 61
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,135评论 1 32
  • 昨天晚上看了这部电影的第五部,之前的都没有看过,原来女巫不是女巫,他是海盗王的女儿,他不希望自己的女儿走她的路,给...
    何施予阅读 300评论 0 0
  • 你应该像鱼一样 记忆有七秒时长 不会记得受的伤 不记曾因谁彷徨 你应该像鱼一样 所有不欢都遗忘 累了可以水里藏 不...
    沈九壹阅读 205评论 0 0
  • 说不清是什么驱动我来写这篇文章,如果一定要说的话或许是对孤独的恐慌! 2017年即将过去一周,坐在漫漫列车上的却一...
    北方的孤魂野鬼阅读 240评论 0 0