BottomNavigationView的使用及遇到的問題
1.使用的時候 item 數大於 3 個時會有位移
使用下面的類通過反射來修改
/** * 取消底部的動畫效果 */ 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); //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); } } }
使用方法:
bottomNavigationView= findViewById(R.id.bottomNavigationView); BottomNavigationViewHelper.disableShiftMode(bottomNavigationView);
2.在使用了上面的方法後,如果混淆簽名,還需要配置混淆檔案,不能混淆這個成員變數!否則會失效的。
-keepclassmembers class android.support.design.internal.BottomNavigationMenuView { boolean mShiftingMode; }