BottomNavigationView icons/text 菜单项不适合某些设备

BottomNavigationView icons/text menu item not fitting in some devices

Android BottomNavigationView icons/text 菜单项不适合某些设备(总共 4 个项目)。在 nexus 5 模拟器上,您必须旋转才能显示所有项目。无论您以纵向还是横向视图开始,图标仅在设备旋转时显示(例如,请参见下图)

我已经尝试了一些可用于测试的物理设备,它在所有这些设备(小型和大型)上都运行良好,我相信它也不适用于三星 S7/8 根据测试人员的说法,但可以'确认一下。

Open in Portrait

Portrait to landscape rotate

Landscape to Portrait

Open in landscape

试试这个。

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) {
      Log.e("BNVHelper", "Unable to get shift mode field", e);
    } catch (IllegalAccessException e) {
      Log.e("BNVHelper", "Unable to change value of shift mode", e);
    }
  }

并将其添加到您的 BottomNavigatoionView

BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
disableShiftMode(navigation); //add the function
navigation.setSelectedItemId(R.id.your_navigation_choice); // set your first icon

在我的情况下,这完全是一个不同的问题。

我从我的服务器响应中检查了一个用户权限变量,然后删除了导航项,但只检查了何时 activity 是 onCreate 中的一个新实例,这就是它在屏幕旋转时不同的原因。

if (savedInstanceState == null) 
   checkUserPermissions();

private void checkUserPermissions(){
   navigation.getMenu().removeItem(R.id.navigation_pickup);
...