转载请注明出处:http://blog.csdn.net/crazy1235/article/details/53458022
Android Support Library 25.0.0 版本中,新增加了一个API –> BottomNavigationView – 底部导航视图。
先来看看这个控件的实现效果。
基本使用
使用起来也很简单
首先在xml中引入该控件
<android.support.design.widget.BottomNavigationView
android:id="@+id/bottom_navi_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
app:itemBackground="@android:color/white"
app:menu="@menu/menu_bottom_navi" />
该控件的基本属性有:
app:itemIconTint : 设置菜单图标着色
app:itemTextColor : 设置菜单文本颜色
app:menu : 设置菜单
app:itemBackground : 设置导航栏的背景色
@menu/menu_buttom_navi
<?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:id="@+id/menu_recent"
android:icon="@drawable/ic_history_black_24dp"
android:title="@string/menu_recents" />
<item
android:id="@+id/menu_favorites"
android:icon="@drawable/ic_favorite_black_24dp"
android:title="@string/menu_favorites" />
<item
android:id="@+id/menu_nearby"
android:icon="@drawable/ic_place_black_24dp"
android:title="@string/menu_nearby" />
<item
android:id="@+id/menu_navi"
android:icon="@drawable/ic_navigation_black_24dp"
android:title="@string/menu_navigation" />
</menu>
与定义普通menu布局一样。
接下来是java代码
bottomNaviView = (BottomNavigationView) findViewById(R.id.bottom_navi_view);
bottomNaviView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_recent:
break;
case R.id.menu_favorites:
break;
case R.id.menu_nearby:
break;
case R.id.menu_navi:
break;
}
return true;
}
});
对BottomNavigationView设置选择监听器就可以做一些item切换事件了。
注意事项
底部导航栏默认高度是56dp
菜单只能是3-5个
源码分析
BottomNavigationView 有几个先关的重要类
BottomNavigationView
BottomNavigationMenu
BottomNavigationMenuView
BottomNavigationPresenter
它的设计有点类似于开发中的 MVP模式。
先来看 BottomNavigationView 的构造函数
public BottomNavigationView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
ThemeUtils.checkAppCompatTheme(context); //检测当前主题
// Create the menu
mMenu = new BottomNavigationMenu(context);
mMenuView = new BottomNavigationMenuView(context);
FrameLayout.LayoutParams params &#