专栏首页学海无涯Android开发之再探底部菜单TabLayout与Bottom navigation实现方式

Android开发之再探底部菜单TabLayout与Bottom navigation实现方式

前文中已经对主流的底部菜单实现进行了详细说明,但随着Android版本的升级,Google又推出了更方便的实现方式,此文就来一探究竟。

</br>

一、利用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实现顶部菜单

效果图:

TabLayout Bottom.png

**注意:这种方式实现起来确实比较简单,不用再自己关联ViewPager与底部菜单的联动。但是这种方式不太好定制指示器的位置,默认指示器在下方,按道理底部菜单的时候应该在上方。我看了很多stackoverflow上面同样的problem,试了都不太好使。如果哪位大侠能比较优雅地解决,可以私信我~~ 偷偷告诉你,在github上有个开源项目 FlycoTabLayout **

二、利用Bottom navigation设计思路来实现

最近 Google 在Material Design设计规范中加入底部导航栏(Bottom navigation),真是千呼万唤始出来啊,因为Google 给出的设计规范之前一直所提倡的是导航栏等相关要素应置于视图顶部,苹果提倡在底部,这次不知怎么的,妥协了~然并卵,谷歌并没有提供对应的控件来实现,用的比较多的还是github上的一个开源项目 Bottom Bar

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android开发之ViewPager+Fragment+FragmentTabHost实现底部菜单

    在Android开发中,底部菜单是经常要使用的,如微信、微博、支付宝等,实现底部菜单有好几种方式,大致分为: 通过TabWidget实现 隐藏TabWidget...

    YungFan
  • Android开发之GridView实现弹出式选择器

    前段时间,写了一个小项目,里面有个界面如下图所示,之前的版本是用Spinner来做,觉得不够拉轰,所以采用GridView做了一个实现,效果还不错,Mark一下...

    YungFan
  • Android开发之那些好用的数据结构与API(二)

    在 Android开发之那些好用的数据结构与API 一文中提到了Android中一些好用的数据结构和API,这次继续补充几个我在项目中用到的好用的但是不是人人都...

    YungFan
  • 用 CoordinatorLayout 处理滚动

    Android 开发者
  • 仿腾讯新闻样式的Toast

    厌倦了网易新闻无处不在的喷子,尝试了一下腾讯新闻,果然顿时清净了很多,当然这不是重点。个人感觉腾讯新闻客户端的Toast比较不错,相对于系统默认的Toast,更...

    技术小黑屋
  • [android] 练习viewpagerindicator的使用(一)

    陶士涵
  • MontionLayout:打开动画新世界大门(其一)

    最初接触到 MotionLayout 是在国外知名博客的 Android 专栏上。第一眼见到 MotionLayout 时无疑是兴奋的,在经过使用和熟悉了这个布...

    Rouse
  • Android与C#里自定义HashTable与Json转换

    最近自己在做的一个程序,后端用的.net C#,其中有相关的一些数据加了自定久的属性,所以用到了HashTable,由于安卓端与后端通信用到的Json数据,所以...

    Vaccae
  • 速读原著-Android应用开发入门教程(几种独立使用的视图组)

    网页视图(WebView)是一个功能强大且常用的控件,它具有许多很好的特性,例如对 js 的支持,可用于制作简易浏览器等。

    cwl_java
  • Android手机平板两不误,使用Fragment实现兼容手机和平板的程序

    记得我之前参与开发过一个项目,要求程序可以支持好几种终端设备,其中就包括Android手机和Android Pad。然后为了节省人力,公司无节操地让Androi...

    用户1158055

扫码关注云+社区

领取腾讯云代金券