Android(安卓)Material design 之 BottomNavigationView(底部导航栏的实现)
16lz
2022-01-05
新建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) } }})
运行效果如下:
更多相关文章
- [Android][Android(安卓)Studio] *.jar 与 *.aar 的生成与*.aar
- eclipse导入已存在的android工程时遇到AndroidManifest.xml文件
- 关于Android(安卓)Studio构建失败,导入新项目打包apk遇到的一些问
- 【Android】Macbook Pro 10.14(macOS Mojave)编译Android9.0(aosp m
- Android(安卓)Studio导入(import)工程时常见错误
- Android串口通信
- 转-Android(安卓)Studio *.jar 与 *.aar 的生成与*.aar导入项目
- Android(安卓)Studio之工程中导入jni库方法
- 在Windows中的安装Android(安卓)NDK开发环境