Android

BottomNavigationView 去掉动画效果

2018-08-22  本文已影响0人  Waino_m

最近在做项目,用到了这个来控制Fragment的显示。
然后这个控件的动画有点不符合我的要求(虽然动画很酷)~


超过三个Item的时候会出现这种动画效果。
我们要做的是去除它的上移动画。

然后开始了百度各种方法来解决。网上基本都是这个方法:

/**
 * @author waino
 * @date 2018/8/21
 * @desc todo
 */
public class BottomNavigationViewHelper {
    @SuppressLint("RestrictedApi")
    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);
                item.setShiftingMode(false);
                item.setChecked(item.getItemData().isChecked());
            }
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}

然后我发现里面的这行代码方法找不到!

item.setShiftingMode(false);

然后我抱着侥幸的心理,打了Shifting, 然后我发现有一个这个方法

item.setShifting(false);

我想着,应该OK了。 心里那是爽的一批。
然后运行上去,没啥用。

然后在国外的网站上翻到了这个,大概是因为百度上的方法都是针对以前的吧。现在更新了。我的版本是:

    compile 'com.android.support:design:28.0.0-rc01'

UPDATE

You also need to update proguard configuration file (e.g. proguard-rules.pro), code above uses reflection and won't work if proguard obfuscate the mShiftingMode field.

-keepclassmembers class android.support.design.internal.BottomNavigationMenuView { 
    boolean mShiftingMode; 
}

Thanks Muhammad Alfaifi for pointing this issue and providing snippet.

UPDATE 2

As Jolanda Verhoef pointed out the new Support library (28.0.1-alpha1) and also the new Material Components library (1.0.0-beta01) offers a public property which can be used to manipulate the shifting mode over 3 menu items.

<com.google.android.material.bottomnavigation.BottomNavigationView
    ...
    app:labelVisibilityMode="labeled"
    ... 
/>

所以解决办法就是在布局里面加属性就好了:

app:labelVisibilityMode="labeled"

有几个动画的选项,可以自己控制~


image.png

我觉得吧,就应该要这么简单就能控制。

参考文档:https://stackoverflow.com/questions/40176244/how-to-disable-bottomnavigationview-shift-mode

上一篇 下一篇

猜你喜欢

热点阅读