特别说明:
BottomNavigationView 是安卓官方提供的底部导航栏,能够方便的实现下图中的底部导航效果。当导航标签少于3个的时候,也可以使用,不会报错,但实际项目中一般不会有少于三个的;如果导航标签超过5个,在使用BottomNavigationView 时在运行期会报错,错误信息如下:
java.lang.IllegalArgumentException: Maximum number of items supported by BottomNavigationView is 5. Limit can be checked with BottomNavigationView#getMaxItemCount()。意思是说,最多不能超过 5 个条目!
简单的使用
1.xml的一些标签说明:
- android:background BottomBavigationView的背景颜色
- app:itemBackground 条目的背景色。设置之后在切换选项时将无法看到水波纹效果
- app:itemIconTint 条目图标的颜色,这里可以是单一的颜色,也可以是select形式的颜色,但是这里建议是select的颜色
- app:itemTextColor 文字的颜色,这个也和上面的一样,也可以设置select
- app:menu 可以设置底部显示的Menu
- setOnNavigationItemSelectedListener() 设置选中条目的监听
- getMenu() 获取menu文件
- setSelectedItemId(R.id.sports) 设置默认选中的选项
这里贴一个简单的颜色Select和布局的Menu
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="#f4b733" android:state_checked="true"></item>
<item android:color="#666565"></item>
</selector>
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:icon="@drawable/ic_menu_camera"
android:title="音乐"/>
<item
android:icon="@drawable/ic_menu_gallery"
android:title="体育"/>
<item
android:icon="@drawable/ic_menu_manage"
android:title="新闻"/>
<item
android:icon="@drawable/ic_menu_send"
android:title="我的"/>
</menu>
2.BottomNavigationView的细节
- 禁用ShiftingMode模式
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 bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_navigation_bar);
BottomNavigationViewHelper.disableShiftMode(bottomNavigationView);
网友评论