特別說明:
BottomNavigationView 是安卓官方提供的底部導(dǎo)航欄脚猾,能夠方便的實現(xiàn)下圖中的底部導(dǎo)航效果葱峡。當(dāng)導(dǎo)航標(biāo)簽少于3個的時候,也可以使用龙助,不會報錯砰奕,但實際項目中一般不會有少于三個的;如果導(dǎo)航標(biāo)簽超過5個提鸟,在使用BottomNavigationView 時在運行期會報錯军援,錯誤信息如下:
java.lang.IllegalArgumentException: Maximum number of items supported by BottomNavigationView is 5. Limit can be checked with BottomNavigationView#getMaxItemCount()。意思是說称勋,最多不能超過 5 個條目胸哥!
簡單的使用
1.xml的一些標(biāo)簽說明:
- android:background BottomBavigationView的背景顏色
- app:itemBackground 條目的背景色。設(shè)置之后在切換選項時將無法看到水波紋效果
- app:itemIconTint 條目圖標(biāo)的顏色,這里可以是單一的顏色,也可以是select形式的顏色,但是這里建議是select的顏色
- app:itemTextColor 文字的顏色,這個也和上面的一樣,也可以設(shè)置select
- app:menu 可以設(shè)置底部顯示的Menu
- setOnNavigationItemSelectedListener() 設(shè)置選中條目的監(jiān)聽
- getMenu() 獲取menu文件
- setSelectedItemId(R.id.sports) 設(shè)置默認(rèn)選中的選項
這里貼一個簡單的顏色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的細(xì)節(jié)
- 禁用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);
}
}
}
然后代碼調(diào)用
BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_navigation_bar);
BottomNavigationViewHelper.disableShiftMode(bottomNavigationView);