BottomNavigationBar使用详解
gitHub地址:https://github.com/Ashok-Varma/BottomNavigation
一、基本使用
1.在AndroidStudio下添加依赖: compile 'com.ashokvarma.android:bottom-navigation-bar:2.0.3' 
2.在布局文件中,添加布局
<com.ashokvarma.bottomnavigation.BottomNavigationBar
android:id="@+id/bottom_navigation_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
3.在代码中为BottomNavigationBar添加Item选项
BottomNavigationBar bottomNavigationBar = (BottomNavigationBar) findViewById(R.id.bottom_navigation_bar); bottomNavigationBar
.addItem(new BottomNavigationItem(R.drawable.ic_home_white_24dp, "Home"))
.addItem(new BottomNavigationItem(R.drawable.ic_book_white_24dp, "Books"))
.addItem(new BottomNavigationItem(R.drawable.ic_music_note_white_24dp, "Music"))
.addItem(new BottomNavigationItem(R.drawable.ic_tv_white_24dp, "Movies & TV"))
.addItem(new BottomNavigationItem(R.drawable.ic_videogame_asset_white_24dp, "Games"))
.initialise();//所有的设置需在调用该方法前完成
4.添加选项卡切换事件监听
 bottomNavigationBar.setTabSelectedListener(new BottomNavigationBar.OnTabSelectedListener(){
            @Override
            public void onTabSelected(int position) {
                //未选中->选中
            }
            @Override
            public void onTabUnselected(int position) {
                //选中->未选中
            }
            @Override
            public void onTabReselected(int position) {
                //选中->选中
            }
        });
二、BottomNavigationBar定制
1. 模式Modes
属性:bnbMode 
值:mode_default, mode_fixed, mode_shifting, mode_fixed_no_title, mode_shifting_no_title 
方法:setMode() 
参数:MODE_DEFAULT, MODE_FIXED, MODE_SHIFTING, MODE_FIXED_NO_TITLE, MODE_SHIFTING_NO_TITLE
每种类型都会显示菜单Icon,只有名称显示方式不同
mode_default:如果选项大于3个,使用mode_shifting,否则使用mode_fixed
mode_fixed:每个item对应名称,不选中也会显示
mode_shifting:每个item对应名称,只有选中才会显示,不选中隐藏
mode_fixed_no_title:相当于mode_fixed只是不显示所有文字
mode_shifting_no_title:相当于mode_shifting只是不显示所有文字
2. 背景样式Background Styles
属性:app:bnbBackgroundStyle 
值:background_style_default, background_style_static, background_style_ripple 
方法:setBackgroundStyle() 
参数:BACKGROUND_STYLE_DEFAULT, BACKGROUND_STYLE_STATIC, BACKGROUND_STYLE_RIPPLE
3种style
background_style_default:如果mode设为MODE_FIXED,默认使用BACKGROUND_STYLE_STATIC;如果mode设为MODE_SHIFTING,默认使用 BACKGROUND_STYLE_RIPPLE
background_style_static:点击的时候没有水波纹效果
background_style_ripple:点击的时候有水波纹效果
3.颜色Colors
属性:bnbActiveColor, bnbInactiveColor, bnbBackgroundColor 
方法:setActiveColor, setInActiveColor, setBarBackgroundColor 
值:颜色值或者资源 
例如:
bottomNavigationBar
.setActiveColor(R.color.primary)
.setInActiveColor("#FFFFFF")
.setBarBackgroundColor("#ECECEC")
类型和默认值
in-active color:图标和文本未被激活或选中的颜色;默认颜色为Theme’s Primary Color
active color : 在BACKGROUND_STYLE_STATIC下,为图标和文本激活或选中的颜色;在BACKGROUND_STYLE_RIPPLE下,为整个控件的背景颜色;默认颜色为Color.LTGRAY
background color :在BACKGROUND_STYLE_STATIC 下,为整个空控件的背景色;在 BACKGROUND_STYLE_RIPPLE 下为图标和文本被激活或选中的颜色;默认颜色为Color.WHITE
4.自定义Item颜色Individual BottomNavigationItem Colors
如果Item的选中/未选中颜色需要特殊处理,可以调用
new BottomNavigationItem(R.drawable.ic_home_white_24dp, "Home")
.setActiveColor(R.color.orange)//设置选中的颜色
.setInActiveColor(R.color.teal)//设为未选中的颜色
5.阴影高度Elevation
属性:bnbElevation
如果不需要阴影或者想要自定义,可以设置为0dp,默认为8dp
6.自定义选项图标BottomNavigationItem Icon Customisations
可以设置选项,选中和未选中使用不同的图标
//setInactiveIcon()设置未选中的图标
new BottomNavigationItem(R.drawable.ic_home_white_24dp, "Home").setInactiveIcon(R.drawable.ic_home_black)
7.自动隐藏/手动隐藏
自动隐藏:
如果容器在Co-ordinator Layout布局内,默认情况下,向下滚动会隐藏,向上滚动会展示;通过调用方法setAutoHideEnabled(false)可以关闭该特性
手动隐藏:
调用方法
bottomNavigationBar.hide();//隐藏
bottomNavigationBar.show();//显示
展示和隐藏时动画模式
默认都是动画模式,参数传false可以关闭动画
bottomNavigationBar.hide(false);//关闭动画效果
bottomNavigationBar.show(false);//关闭动画效果
isHidden() 返回是否隐藏
三、BottomNavigationBar角标(小红点)Badges
基本使用
1.如何添加
- 每个item都可以添加badge
 - 每个item又一个badges
 - 首先创建一个BadgeItem,然后关联到item上
 
2.类型
- TextBadgeItem
 - ShapeBadgeItem
 
3.代码示例
//setBadgeItem(badgeItem)
TextBadgeItem numberBadgeItem = new TextBadgeItem();
ShapeBadgeItem shapeBadgeItem = new ShapeBadgeItem();
bottomNavigationBar
.addItem(new BottomNavigationItem(R.drawable.ic_home_white_24dp, "Home").setActiveColorResource(R.color.orange).setBadgeItem(numberBadgeItem)) bottomNavigationBar
.addItem(new BottomNavigationItem(R.drawable.ic_home_white_24dp, "Home").setActiveColorResource(R.color.orange).setBadgeItem(shapeBadgeItem)) numberBadgeItem.setText("")// 更新数据
也可以自定义badgeItem
 numberBadgeItem.setText("9") //显示的文本
        .setBackgroundColor("#FF0000") //背景色
        .setTextColor("#FFFFFF") //文本颜色
        .setBorderColor("#000000") //border颜色
        .setBorderWidth(5) //border宽度px
        .setBackgroundColorResource(R.color.colorPrimaryDark) //背景色,资源文件获取
        .setBorderColorResource(R.color.colorPrimary) //border颜色,资源文件获取
        .setTextColorResource(R.color.colorAccent) //文本颜色,资源文件获取
        .setAnimationDuration(30) //隐藏和展示的动画速度,单位毫秒,和setHideOnSelect一起使用
        .setGravity(Gravity.RIGHT|Gravity.TOP) //位置,默认右上角
        .setHideOnSelect(true); //true:当选中状态时消失,非选中状态显示,moren false
 shapeBadgeItem.setShape(SHAPE_OVAL) //形状
        .setShapeColor(Color.BLUE) //颜色
        .setShapeColorResource(R.color.colorPrimaryDark) //颜色,资源文件获取
        .setEdgeMarginInDp(this,0) //距离Item的margin,dp
        .setEdgeMarginInPixels(20) //距离Item的margin,px
        .setSizeInDp(this,10,10) //宽高,dp
        .setSizeInPixels(5,5) //宽高,px
        .setAnimationDuration(200) //隐藏和展示的动画速度,单位毫秒,和setHideOnSelect一起使用
        .setGravity(Gravity.LEFT) //位置,默认右上角
        .setHideOnSelect(true); //true:当选中状态时消失,非选中状态显示,moren false
4.badgeItem方法简介
| 属性 | 描述 | 方法 | 参数 | 
|---|---|---|---|
| Hide On Select | 选中时隐藏,默认false | setHideOnSelect() | boolean | 
| Animation Duration | 显示隐藏的动画时间,默认200 | setAnimationDuration() | int毫秒 | 
| Hide | 隐藏并有动画效果 | hide() | |
| Hide with animation control | 隐藏时动画效果,默认有(true) | hide() | boolean | 
| UnHide/Show | 显示并有动画效果 | show() | |
| UnHide/Show with animation control | 显示时动画效果,默认有(true) | show() | boolean | 
| Toggle | toggles badge between hide/show with animation | toggle() | |
| Toggle with animation control | toggles badge between hide/show with/without animation | toggle() | |
| Is Hidden | 是否隐藏 | isHidden() | |
| Graviy | 设置位置,默认右上角 | setGravity() | Gravity.TOP/BOTTOM/LEFT/RIGHT任意组合 | 
5.textBadgeItem方法简介
| 属性 | 描述 | 方法 | 参数 | 
|---|---|---|---|
| Textt | 设置文本 | setText() | CharSequence | 
| Text Color | 设置文本颜色,默认白色 | setTextColorResource(), setTextColor() | Resource/ColorCode(String)/Color | 
| BackgroundColor | 设置背景颜色 | setBackgroundColorResource(), setBackgroundColor() | Resource/ColorCode(String)/Color | 
| Border Width | 设置border宽度 | setBorderWidth() | int (px值) | 
| Border Color | 设置border颜色 | setBorderColorResource(), setBorderColor() | Resource/ColorCode(String)/Color | 
6.shapeBadgeItem方法简介
| 属性 | 描述 | 方法 | 参数 | 
|---|---|---|---|
| Shape | 设置形状 | setShape() | SHAPE_OVAL(椭圆), SHAPE_RECTANGLE(矩形), SHAPE_HEART(心形), SHAPE_STAR_3_VERTICES(三角形), SHAPE_STAR_4_VERTICES(菱形), SHAPE_STAR_5_VERTICES(五角星), SHAPE_STAR_6_VERTICES(六角) | 
| yanse | 设置颜色 | setShapeColorResource(), setShapeColor() | Resource/ColorCode(String)/Color | 
| Shape Size | 设置宽高 | setSizeInDp(), setSizeInPixels() | int(width and height in pixels/dp) | 
| Shape Margin | Margin around the shape | setEdgeMarginInDp(), setEdgeMarginInPixels() | int (margin in pixels/dp) | 
四、FAB & SnackBar
1.SnackBar
底部导航自动与snackBar同步,无需任何代码。
2.FAB
- FAB和BottomNavigationBar必须在同一个Coordinator Layout.
 - 调用bottomNavigationBar的setFab()方法关联
 
3.示例代码
FloatingActionButton fabHome = (FloatingActionButton) findViewById(R.id.fab_home);
BottomNavigationBar bottomNavigationBar = (BottomNavigationBar) findViewById(R.id.bnb);
bottomNavigationBar.setFab(fabHome);
BottomNavigationBar使用详解的更多相关文章
- Flutter学习笔记(15)--MaterialApp应用组件及routes路由详解
		
如需转载,请注明出处:Flutter学习笔记(15)--MaterialApp应用组件及routes路由详解 最近一段时间生病了,整天往医院跑,也没状态学东西了,现在是好了不少了,也该继续学习啦!!! ...
 - Linq之旅:Linq入门详解(Linq to Objects)
		
示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...
 - 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
		
一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...
 - EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解
		
前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...
 - Java 字符串格式化详解
		
Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...
 - Android Notification 详解(一)——基本操作
		
Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...
 - Android Notification 详解——基本操作
		
Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...
 - Git初探--笔记整理和Git命令详解
		
几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...
 - Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
		
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
 
随机推荐
- LOJ6283 数列分块入门7(分块)
			
pushdown的addtag[x]打成addtag[i],结果WA了一次 #include <cstdio> #include <algorithm> #include &l ...
 - C++变量的默认初始化规则
			
定义没有初始化式的变量时,系统有时候会帮我们初始化变量.系统如何初始化取决于变量的类型以及变量定义的位置. 内置类型变量是否自动初始化取决于变量定义的位置.函数体外定义的变量初始成0:函数体内定义的变 ...
 - [转载]grep查看上下文及简单正则表达式
			
转载自:https://www.cnblogs.com/mfryf/p/3336288.html inux grep 显示前后几行的信息2016年03月02日 14:10:58 ChenHui246 ...
 - Ubuntu14.04下 升级 cmake
			
参考: How to install cmake 3.2 on ubuntu 14.04? Ubuntu14.04下升级cmake 1.通过PPA安装: $ sudo apt-get install ...
 - Echarts 修改字体样色 X、Y轴
			
1.雷达图修改字体颜色 polar: [ { name:{ show: true, formatter: null, textStyle: { //设置颜色 color: '#109cad' } }, ...
 - Redis 个人理解总结
			
一.什么是Redis ? Redis(remote dictionnary server)是一个key-value存储系统.Redis是一个开源的使用ANSI C语言编写.遵守BSD协议.支持网络.可 ...
 - python 排序 由大到小
			
import functools class Solution: # @param {integer[]} nums # @return {string} def largestNumber(self ...
 - Servlet模板,一个供新手参考的模板
			
由于这学期老师的进度是刚开始教JavaSE部分,而我的进度比较快,所以买了3本javaee的书,我根据自己的基础,选择了合适的开发实践,另外两本书都和框架相关,我自认为我的web基础还不是很牢固,所以 ...
 - 借助JCharDet获取文件字符集
			
前段时间,在学习lucene的时候,遇到了读取txt文档遇到编码错误的问题.学了几个解决方案,大部分是将文件转十六进制(可以使用UE的Ctrl+H来查看),读取开头的四个标志位来判断.可是总有些文本文 ...
 - 关于UTC时间和本地时间
			
收藏了个类Publics 可以实现本地时间和UTC时间的转换 UCT时间=本地时间-8 本地时间比UTC时间快8小时 element-ui的日期选择器上 选择的时间显示的是本地时间 但实 ...