BottomNavigationView图标/文本菜单项不适合某些设备

时间:2018-02-01 21:44:35

标签: android bottomnavigationview

Android BottomNavigationView图标/文字菜单项不适合某些设备(共4项)。在nexus 5模拟器上,您必须旋转才能显示所有项目。如果从纵向或横向视图开始并不重要,图标仅在设备旋转时显示(例如,参见下图)

我已经尝试了一些我可用于测试的物理设备,并且它在所有这些设备(小型和大型)上都能正常工作,我认为根据测试仪它也不适用于三星S7 / 8但是无法确认

Open in Portrait

Portrait to landscape rotate

Landscape to Portrait

Open in landscape

2 个答案:

答案 0 :(得分:1)

尝试这个。

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

答案 1 :(得分:0)

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

我正在从我的服务器响应中检查用户权限变量,然后删除导航项,但仅检查活动是否是onCreate中的新实例,这就是屏幕旋转时不同的原因。

if (savedInstanceState == null) 
   checkUserPermissions();

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