BottomNavigationView 关闭 shifting
2016-11-18 本文已影响2588人
ChristmasJason
android support library 25.0.0 版本添加了 BottomNavigationView
使用方式 ( 简要阐述 )
// 首先定义要展示的 menu
// menu_bottom_navigation.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/action_content"
android:icon="@mipmap/ic_launcher"
android:title="内容" />
<item android:id="@+id/action_detail"
android:icon="@mipmap/ic_launcher"
android:title="详情" />
<item android:id="@+id/action_info"
android:icon="@mipmap/ic_launcher"
android:title="资讯" />
<item android:id="@+id/action_featured"
android:icon="@mipmap/ic_launcher"
android:title="精选" />
</menu>
// 然后在布局文件中引用即可
<android.support.design.widget.BottomNavigationView
android:id="@+id/bnv_bottom_menu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
app:itemIconTint="@android:color/holo_purple"
app:itemTextColor="@android:color/tab_indicator_text"
app:menu="@menu/menu_bottom_navigation" />
3个 item 时候是这样
4 ~ 5个 item 时候就变成这样了( 选中的 item 会被放大 )
当 item 数目大于 3 个之后,会有 mShiftingMode 这个 boolean 变量控制 item 的缩放比例
去除菜单项目大于 3 个之后,菜单项目缩放的方式
// 利用发射机制,改变 item 的 mShiftingMode 变量
public class BottomNavigationViewHelper {
public static void disableShiftMode(BottomNavigationView navigationView) {
BottomNavigationMenuView menuView =
(BottomNavigationMenuView) navigationView.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 itemView = (BottomNavigationItemView) menuView.getChildAt(i);
itemView.setShiftingMode(false);
itemView.setChecked(itemView.getItemData().isChecked());
}
} catch (NoSuchFieldException e) {
// Log
} catch (IllegalAccessException e) {
// Log
}
}
}
使用方式
BottomNavigationView bottomNavigationView =
(BottomNavigationView) findViewById(R.id.bnv_bottom_menu);
BottomNavigationViewHelper.disableShiftMode(bottomNavigationView);
注意,每次修改 menu 都要调用 helper 的方法