之前我是使用的RadioGroup与RadioButton、碎片相结合实现底部选项卡,在这里就使用BottomNavigationBar结合Fragment来实现。
1.添加依赖
compile'com.ashokvarma.android:bottom-navigation-bar:2.0.3'
2.在当前活动的xml文件中,添加BottomNavigationBar和FrameLayout来存放Fragment

2.自定义MyFragment继承Fregment (再次只展示一个,根据底部选项卡的选项个数来定义不同的Fragment)

3.在MainActivity.class中
首先,先定义变量,其中myFragment表示当前碎片

定义一个方法initFragment(),用于初始化碎片,以及设置默认的碎片,把第一个碎片作为第一个显示,并把第一个碎片设置为当前碎片

定义方法chooseFragment(fragment),根据传入的碎片,首先判断是否为当前碎片,若不是,再判断该碎片是否已经被添加到了transaction,若没有被添加过,则把当前碎片隐藏,将传入的碎片添加到transaction,否则隐藏当前的碎片,直接显示传入的碎片。在最后,把传入的碎片设置为当前碎片。

设置BottomNavigationBar的属性,其中 Mode和BackgroundStyle分别有三种,分别包含一种Default模式:
Mode包含3种Mode:
MODE_DEFAULT: 如果Item的个数<=3就会使用MODE_FIXED模式,否则使用MODE_SHIFTING模式
MODE_FIXED: 填充模式,未选中的Item会显示文字,没有换挡动画。
MODE_SHIFTING: 换挡模式,未选中的Item不会显示文字,选中的会显示文字。在切换的时候会有一个像换挡的动画
Background Style包含3种Style:
BACKGROUND_STYLE_DEFAULT: 默认
BACKGROUND_STYLE_STATIC: 点击的时候没有水波纹效果
BACKGROUND_STYLE_RIPPLE: 点击的时候有水波纹效果
如果设置的Mode为MODE_FIXED,将使用BACKGROUND_STYLE_STATIC 。
如果Mode为MODE_SHIFTING将使用BACKGROUND_STYLE_RIPPLE。

最后设置监听事件:

网友评论