2018 年 5 月 8 日更新
可以
app:labelVisibilityMode="labeled"
直接在<android.support.design.widget.BottomNavigationView />
来源:https ://developer.android.com/reference/com/google/android/material/bottomnavigation/LabelVisibilityMode
不需要这个冗长的解决方案。
以前的答案
我对 BottomNavigationView 有一些奇怪的行为。当我选择其中的任何项目/片段时,片段将 BottomNavigationView 推低一点,因此 BottomNavigationView 的文本位于屏幕下方,因此只有图标可见,并且在单击任何项目时文本会隐藏。
如果您面临这种奇怪的行为,那么这里就是解决方案。只需删除
android:fitsSystemWindows="true"
在您的片段的根布局中。只需删除它并繁荣!BottomNavigationView 可以正常工作,现在可以用文本和图标显示。我在片段的根 CoordinatorLayout 中有这个。
也不要忘记添加
BottomNavigationViewHelper.removeShiftMode(bottomNavigationView);
在您的活动中禁用换档模式。
这是那个类:
public class BottomNavigationViewHelper {
@SuppressLint("RestrictedApi")
public static void removeShiftMode(BottomNavigationView view) {
//this will remove shift mode for bottom navigation 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);
// set once again checked value, so view will be updated
item.setChecked(item.getItemData().isChecked());
}
} catch (NoSuchFieldException e) {
Log.e("ERROR NO SUCH FIELD", "Unable to get shift mode field");
} catch (IllegalAccessException e) {
Log.e("ERROR ILLEGAL ALG", "Unable to change value of shift mode");
}
}
}