问题描述:
我们使用BottomNavigationView作为底部菜单时,当菜单项多于3个时,效果和3个及以下的效果已经完全不一样了,只有选中的菜单项才会显示出文字,未选中的菜单项只显示图标。动画效果看着很炫酷,但是APP设计要求的效果是与菜单项是3个的一致。下面我介绍一种解决的方案,首先看一下未做处理的4个菜单项效果图(图1)和做过处理的效果图(图2):
—–》
解决方案: 新建一个BottomNavigationViewHelper 类,使用BottomNavigation时调用它即可消除动画
实现代码如下:
import android.annotation.SuppressLint; import android.support.design.internal.BottomNavigationItemView; import android.support.design.internal.BottomNavigationMenuView; import android.support.design.widget.BottomNavigationView; import android.util.Log; import java.lang.reflect.Field; /** * Created by 得已 on 2018/7/3. */ public class BottomNavigationViewHelper { @SuppressLint("RestrictedApi") public static void disableShiftMode(BottomNavigationView view) { //获取子View BottomNavigationMenuView的对象 BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0); try { //设置私有成员变量mShiftingMode可以修改 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); //去除shift效果 item.setShiftingMode(false); item.setChecked(item.getItemData().isChecked()); } } catch (NoSuchFieldException e) { Log.e("BNVHelper", "没有mShiftingMode这个成员变量", e); } catch (IllegalAccessException e) { Log.e("BNVHelper", "无法修改mShiftingMode的值", e); } } }
使用很简单,findViewById找到BottomNavigationView 时直接调用即可
BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
BottomNavigationViewHelper.disableShiftMode(navigation);