如何禁用BottomNavigationView移位模式?
BottomNavigationView不显示不活动的菜单标题。
如何在bottomNavigationBar中显示所有菜单元素的标题? 问题是在我的情况下只显示被点击的元素的标题。
BottomNavigationView
实现有条件:当有超过3个项目,然后使用移位模式。
在这一刻,你不能通过现有的API来改变它,禁用移位模式的唯一方法就是使用reflection。
你需要帮助者类:
import android.support.design.internal.BottomNavigationItemView; import android.support.design.internal.BottomNavigationMenuView; import android.support.design.widget.BottomNavigationView; import android.util.Log; 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("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); //noinspection RestrictedApi item.setShiftingMode(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); } } }
然后在你的BottomNavigationView
上应用disableShiftMode
方法,但记住如果你从代码充气菜单视图,你必须在充气后执行它。
用法示例:
BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_navigation_bar); BottomNavigationViewHelper.disableShiftMode(bottomNavigationView);
PS。
请记住,每次更改BottomNavigationView
菜单项时都需要执行此方法。
UPDATE
您还需要更新proguardconfiguration文件(例如proguard-rules.pro),上面的代码使用reflection,如果proguard模糊mShiftingMode
字段将不会工作。
-keepclassmembers class android.support.design.internal.BottomNavigationMenuView { boolean mShiftingMode; }
感谢穆罕默德阿尔法菲指出这个问题,并提供片段 。
要禁用文本animation,您还可以在您的dimens.xml文件中使用它:
<dimen name="design_bottom_navigation_active_text_size">12sp</dimen>
要禁用文本animation并减小字体大小,请在您的dimens.xml文件中使用以下代码:
<dimen name="design_bottom_navigation_text_size">10sp</dimen> <dimen name="design_bottom_navigation_active_text_size">10sp</dimen>
- 检测状态栏可见性/ TYPE_SYSTEM_OVERLAY不会自动resize
- 在非活动类中需要上下文
- 如何创build自定义的微调框,像微调框右边的三angular形边框?
- LinearLayout不在ScrollView内部扩展
- 在Android中将应用上下文保存到静态variables是否安全?
- Android 2.2 MediaPlayer可以正常工作,只有一个SHOUTcast URL,但不能用另一个SHOUTcast URL
- 在SQLiteDatabase.query()中使用String selectionArgs
- 需要禁用展开CollapsingToolbarLayout的某些片段
- 在Android中获取电池电量和状态