美文网首页Android
API28 BottomNavigationView 去除位

API28 BottomNavigationView 去除位

作者: 十年如歌 | 来源:发表于2019-01-21 20:06 被阅读0次

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

    愉快的解决了!

    相关文章

      网友评论

        本文标题:API28 BottomNavigationView 去除位

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