Android丨BottomNavigationView專案大於3切換效果
阿新 • • 發佈:2019-02-19
問題描述:
這幾天在開發專案時,使用Android自帶的BottomNavigationView來切換佈局
Navigation數目<3時,底部操作欄不會隱藏導航字型,如圖:
但是如果專案數量大於3時,會出現以下效果
這樣的效果雖然很好地解決了佈局,但不能很好地迎合主流設計。
解決辦法:
點進專案的
BottomNavigationMenuView.java
mShiftingMode = mMenu.size() > 3; for (int i = 0; i < mMenu.size(); i++) { mPresenter.setUpdateSuspended(true會發現,導航的切換模式,是由); mMenu.getItem(i).setCheckable(true); mPresenter.setUpdateSuspended(false); BottomNavigationItemView child = getNewItem(); mButtons[i] = child; child.setIconTintList(mItemIconTint); child.setTextColor(mItemTextColor); child.setItemBackground(mItemBackgroundRes); child.setShiftingMode(mShiftingMode); child.initialize((MenuItemImpl) mMenu.getItem(i), 0); child.setItemPosition(i); child.setOnClickListener(mOnClickListener); addView(child); } mSelectedItemPosition = Math.min(mMenu.size() - 1, mSelectedItemPosition); mMenu.getItem(mSelectedItemPosition).setChecked(true); }
mShiftingMode = mMenu.size() > 3;控制的,那麼我們在帶NavigationView中的類中,通過反射機制修改這個數字,那麼就可以成功修改NavigationBar>3時的
切換模式了:
//反射NavigationView切換模式 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(); }