前文中已经对主流的底部菜单实现进行了详细说明,但随着Android版本的升级,Google又推出了更方便的实现方式,此文就来一探究竟。
一、利用TabLayout来实现
TabLayout 我在Android开发之TabLayout实现顶部菜单一文中是用来做顶部菜单的。确实,Google设计出来本意是做顶部菜单的,但是也可以作为底部菜单来使用。注意与前文比较,只需要稍微修改一下Activity的布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v4.view.ViewPager
android:id="@+id/vp_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" /> //占用上面,留出位置给TabLayout
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="#1FBCD2"
//这两句话一起使用 因为底部菜单一般个数不多,使用这种方式,可以等分且居中
app:tabGravity="fill"
app:tabMode="fixed"
//因为默认指示器在下面,不合适使用在底部菜单所以直接设置其高度为0
app:tabIndicatorHeight="0dp"
app:tabSelectedTextColor="#FFFFFF"
app:tabTextColor="#000000"></android.support.design.widget.TabLayout>
</LinearLayout>
其余地方不用变化,稍微修改一下底部菜单的个数就可以了,我这里就保留了4个,重复的代码我就不贴了,可以参考Android开发之TabLayout实现顶部菜单
效果图:
注意:这种方式实现起来确实比较简单,不用再自己关联ViewPager与底部菜单的联动。但是这种方式不太好定制指示器的位置,默认指示器在下方,按道理底部菜单的时候应该在上方。我看了很多stackoverflow上面同样的problem,试了都不太好使。如果哪位大侠能比较优雅地解决,可以私信我~~ 偷偷告诉你,在github上有个开源项目 FlycoTabLayout
二、利用Bottom navigation设计思路来实现
最近 Google 在Material Design设计规范中加入底部导航栏(Bottom navigation),真是千呼万唤始出来啊,因为Google 给出的设计规范之前一直所提倡的是导航栏等相关要素应置于视图顶部,苹果提倡在底部,这次不知怎么的,妥协了~然并卵,谷歌并没有提供对应的控件来实现,用的比较多的还是github上的一个开源项目 Bottom Bar