BottomNavigationView去除動畫,大於3項時不顯示文字的最新解決方案
阿新 • • 發佈:2018-12-04
背景
今天在用 BottomNavigationView
實現底部導航欄時出現了個小問題,效果如下:
當使用BottomNavigationView
選單項多於3個時,去除動畫效果,顯示選單項文字。
初級方案
在網上看到解決方案是這樣:
/** * 建立時間:2018/10/30 * 編寫人:kanghb * 功能描述:當使用BottomNavigationView選單項多於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.setShiftMode(false); item.setChecked(item.getItemData().isChecked()); } } catch (NoSuchFieldException e) { Log.e("BNVHelper", "沒有mShiftingMode這個成員變數", e); } catch (IllegalAccessException e) { Log.e("BNVHelper", "無法修改mShiftingMode的值", e); } } }
但是我引入的是
implementation 'com.android.support:appcompat-v7:28.0.0'
BottomNavigationItemView
裡面並沒有setShiftMode方法,直接報錯,我看了下
BottomNavigationItemView程式碼,貌似換成了
setShifting方法,於是乎我就開心的換了,然並卵。後來我又發現
BottomNavigationMenuView中也沒有
mShiftingMode`變數,然後一臉懵逼,最後在stackoverflow發現瞭解決方案,嘻嘻
最終方案
很簡單就是在xml中給BottomNavigationView
<android.support.design.widget.BottomNavigationView android:id="@+id/botton_navigation" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" android:background="@color/ivory" android:elevation="@dimen/dp_16" app:labelVisibilityMode="labeled" app:menu="@menu/menu_bottom_nav"> </android.support.design.widget.BottomNavigationView>