新建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)//获取底部导航itemvar 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)        }    }})

运行效果如下:

更多相关文章

  1. [Android][Android(安卓)Studio] *.jar 与 *.aar 的生成与*.aar
  2. eclipse导入已存在的android工程时遇到AndroidManifest.xml文件
  3. 关于Android(安卓)Studio构建失败,导入新项目打包apk遇到的一些问
  4. 【Android】Macbook Pro 10.14(macOS Mojave)编译Android9.0(aosp m
  5. Android(安卓)Studio导入(import)工程时常见错误
  6. Android串口通信
  7. 转-Android(安卓)Studio *.jar 与 *.aar 的生成与*.aar导入项目
  8. Android(安卓)Studio之工程中导入jni库方法
  9. 在Windows中的安装Android(安卓)NDK开发环境

随机推荐

  1. 如何自学安卓
  2. 我的android——OpenGL(2)——gl10方法解析
  3. android路上
  4. Android应用架构前世今生
  5. Android基础---学习历程【上课用到的资源
  6. Android NDK入门开发案例
  7. 如何避免打开键盘或横竖屏切换,active重启
  8. android wifi调试
  9. android EditText里面嵌入两个按钮,通过按
  10. Android官方MVP架构--解读