对于无突出选项的菜单栏来说,可以使用Matiral Design提供的BottomNavigationView+ViewPager+Fragment实现
BottomNavigationView简单介绍:
1、建议标签个数在3~5之前,多了会报错,少了。。。emmmmm简单尝试过两个标签的好像没事,但是就两个标签我觉得没必要用这个了
2、控件默认3个便签是文字会显示,超过三个标签只显示选中项的文字。当然这个通过代码可以设置
3、不能实现那种某一项突出放大的效果——就是像中间放个大加号的那种菜单栏,它的每个选项控件大小是一致的
4、其选项通过layout/menu/xxx文件 定义,建议选项icon使用svg图片,以便选项icon颜色根据选择情况变化
4、想到了再补......................
实现:
1、在layout中添加BottomNavigationView和ViewPager控件
labelVisibilityMode : 设置菜单文字,四个可选项,也可在代码中通过setLableVisibilityMode来设置
a) auto 就是上面说的默认情况
b) labeled 始终显示文字
c) selected 只显示选中项的文字
d) 始终不显示文字
menu : 对应menu文件夹下的选项文件,几个标签就对应几个Item
小提示:对于svg图片可以先在android提供的图标库里面查找,可直接生成svg图片。通过New-Vector Asset可以进入,记得放在drawable文件夹下
2、在activity中初始化控件
a) 在bottomListener中设置每个Item选项的点击事件
b) 在viewPagerListener中添加滑动监听事件
在该类中默认存在三个方法,onPageScroll(滑动监听),onPageSelected(对应选中项操作),onPageScrollStateChanged(手指屏幕监听)。主要用到第二个方法设置点击时切换到对应页面:
c) setupViewPager是我自定义的方法,用于添加对应的fragment
正常来说不同页面对应不同Fragment,这里我简单化就用一个Fragment 来实现多个页面,实际使用还是要实例化多个fragment的就如我注释掉的那行一样。如果有多个fragment还可以通过List保存不同fragment,最后输入到适配器中,这个就是自定义适配器的事了。
d) 自定义viewAdapter,因为用的fragment这里我的adapter继承于FragmentPagerAdapter
private一个列表list变量保存的fragment列表
继承之后Alt+Enter继承重新方法
修改getItem和getCount的返回值为list的选项或者list长度
定义一个构造函数接收传入的List<Fragment>
我添加了一个方法用于实现上面的add Fragment
..............................................................至此最基本的选项卡式菜单栏就实现了..............................................................
进阶一:
ViewPage是否禁止左右滑动
自定义一个viewPager控件
添加一个变量isSrcoll来控制是否可滑动
在方法onInterceptTouchEvent和onTouchEvent中,当isScroll==false(禁止滑动)时返回false
添加一个方法setIsScroll方便外部调用设置
进阶二:
ViewPage滑动动画设置和自定义
viewPager有两个setCurrentItem方法,可通过setCurrentItem(i,false)禁止动画
自定义动画通过setPageTransformer(true,new XXX())设置
定义一个XXX类implements 一个ViewPager.PageTransformer接口,在transformPage方法中对每个页面进行设置
因为也是照着别人的文章学的,直接参考https://www.jianshu.com/p/c9e8448472ed吧
进阶三:
选项卡颜色问题:
默认情况下bottomNavigation采用的是选中色为@Color/colorPrimary,未选择色为灰色。