借鉴 https://blog.csdn.net/junguo_fan/article/details/80304609
如果根据这篇文章不行的,可以看看我下面 唠嗑
刚刚新建工程的时候用到了BottomNavigationView ,原型一定要同时显示所有的label,这还不简单网上找找就出来了
但是 我个人喜欢使用最新编译器是当前最新版 3.3 canary 7 自然支持库也是最新的了
此时这段代码不起作用了>.< mShiftingMode -->找不到了
根据这段代码找到了 BottomNavigationMenuView , 搜索了源码里面 包含Mode的 字段 只有
labelVisibilityMode (它的定义也是加了注解的)
,同时 找到了下图这个方法,与文章中 item.setShifting(false); 这句话 有相似之处 -> Shifting
private boolean isShifting(int labelVisibilityMode, int childCount) {
return labelVisibilityMode == -1 ? childCount > 3 : labelVisibilityMode == 0;
}
动作 :mShiftingMode --替换--> labelVisibilityMode (值是我试出来的 1)
最终代码:
import android.util.Log;
import com.google.android.material.bottomnavigation.BottomNavigationItemView;
import com.google.android.material.bottomnavigation.BottomNavigationMenuView;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import java.lang.reflect.Field;
public class BottomNavigationViewHelper {
public static void disableShiftMode(BottomNavigationView view) {
BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0);
try {
Field shiftingMode = menuView.getClass().getDeclaredField("labelVisibilityMode");
shiftingMode.setAccessible(true);
shiftingMode.setInt(menuView, 1);//labelVisibilityMode
// shiftingMode.setBoolean(menuView, false);//mShiftingMode
shiftingMode.setAccessible(false);
for (int i = 0; i < menuView.getChildCount(); i++) {
BottomNavigationItemView item = (BottomNavigationItemView) menuView.getChildAt(i);
//noinspection RestrictedApi
// item.setShiftingMode(false);
item.setShifting(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);
}
}
}