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);
...
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);
...