Android Material design 之 BottomNavigationView(底部导航栏的实现)

新建project然后导入以下support:design library,BottomNavigationView就在这个design库中。顺带导入这个V4包,因为待会要使用到ViewPager进行联动
项目地址为(https://github.com/KilleTom/MyMaterialDesignDemo)这个项目我后面会陆续更新更多的MaterialDesignDemo

res下新建menu文件夹,新建一个menu菜单,有具体需求决定。

app:itemIconTint="" 为icon着色,写个selector即可。
app:itemTextColor=""该属性为文字着色,同样写个selector实现点击颜色切换的效果。

具体实现代码如下:
app:itemIconTint="@drawable/bn_icon_seletor"
app:itemTextColor="@drawable/bn_icon_seletor"

 
 
// 利用反射,改变 item 中 mShiftingMode 的值 public class BottomNavigationViewHelper { @SuppressLint("RestrictedApi") 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 | IllegalAccessException e) { e.printStackTrace(); } } }
//反射解决底部item移动动画
BottomNavigationViewHelper.disableShiftMode(navigation)
tab.setupWithViewPager(vp)
//获取底部导航item
var menuItem: MenuItem? = null
//设置点击底部导航item事件
navigation.setOnNavigationItemSelectedListener(BottomNavigationView.OnNavigationItemSelectedListener { item ->
    when (item.itemId) {
        R.id.navigation_home -> {
            vp.currentItem = 0
            return@OnNavigationItemSelectedListener true
        }
        R.id.navigation_dashboard -> {
            vp.currentItem = 1
            return@OnNavigationItemSelectedListener true
        }
        R.id.navigation_notifications -> {
            vp.currentItem = 2
            return@OnNavigationItemSelectedListener true
        }
        R.id.navigation_camera -> {
            vp.currentItem = 3
            return@OnNavigationItemSelectedListener true
        }
    }
    false
})
vp.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
    override fun onPageScrollStateChanged(state: Int) {

    }
    override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {

    }
    //ViewPage滑动回调设置item变亮即选中
    override fun onPageSelected(position: Int) {
        runOnUiThread {
            if (menuItem != null) menuItem!!.setChecked(false)
             else navigation.menu.getItem(0).setChecked(false)
            menuItem = navigation.menu.getItem(position)
            menuItem!!.setChecked(true)
        }
    }
})
运行效果如下:

猜你喜欢

转载自blog.csdn.net/qq_29856589/article/details/80311907