1.github地址

https://github.com/zhouxu88/BottomNavigationBar

2.基本使用

2,1添加依赖

implementation 'com.ashokvarma.android:bottom-navigation-bar:2.0.5'

  

2.2布局中使用

 <com.ashokvarma.bottomnavigation.BottomNavigationBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/bottom_nav_bar"
android:layout_alignParentBottom="true"
></com.ashokvarma.bottomnavigation.BottomNavigationBar>

  

2.3代码中设置

        /**
* 导航基础设置 包括按钮选中效果 导航栏背景色等
*/
bottomNavigationBar.setTabSelectedListener(this)
.setMode(BottomNavigationBar.MODE_FIXED)
.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC)
.setActiveColor("#ffffff")//选中颜色
.setInActiveColor("#2B2B2B")//未选中颜色
.setBarBackgroundColor("#EDC18E");//导航栏背景色
badgeItem = new TextBadgeItem()
.setBorderWidth(2)
.setTextColor(Color.BLACK)
.setBackgroundColor(Color.RED)
.setText("99"); /**
*添加导航按钮
*/
bottomNavigationBar.addItem(new BottomNavigationItem(R.mipmap.home,"首页"))
.addItem(new BottomNavigationItem(R.mipmap.setting,"设置"))
.addItem(new BottomNavigationItem(R.mipmap.menu,"菜单").setInActiveColor("#ffff00"))
.addItem(new BottomNavigationItem(R.mipmap.person,"个人").setBadgeItem(badgeItem))//添加小红点数据
.initialise();//initialise 一定要放在 所有设置的最后一项

  

2.4添加监听

bottomNavigationBar.setTabSelectedListener(new BottomNavigationBar.OnTabSelectedListener() {//这里也可以使用SimpleOnTabSelectedListener
@Override
public void onTabSelected(int position) {//未选中 -> 选中
} @Override
public void onTabUnselected(int position) {//选中 -> 未选中
} @Override
public void onTabReselected(int position) {//选中 -> 选中
}
});

  

3.知识点,用法说明。

3.1设置导航栏模式:setMode()

setMode() 内的参数有三种模式类型:
MODE_DEFAULT 自动模式:导航栏Item的个数<=3 用 MODE_FIXED 模式,否则用 MODE_SHIFTING 模式
MODE_FIXED 固定模式:未选中的Item显示文字,无切换动画效果。
MODE_SHIFTING 切换模式:未选中的Item不显示文字,选中的显示文字,有切换动画效果。

  

3.2设置导航栏背景模式:setBackgroundStyle()

setBackgroundStyle() 内的参数有三种样式
BACKGROUND_STYLE_DEFAULT: 默认样式 如果设置的Mode为MODE_FIXED,将使用BACKGROUND_STYLE_STATIC,如果Mode为MODE_SHIFTING将使用BACKGROUND_STYLE_RIPPLE。
BACKGROUND_STYLE_STATIC: 静态样式 点击无波纹效果,航条的背景色是白色,加上setBarBackgroundColor()可以设置成你所需要的任何背景颜色
BACKGROUND_STYLE_RIPPLE: 波纹样式 点击有波纹效果,导航条的背景色是你设置的处于选中状态的 Item的颜色(ActiveColor),也就是setActiveColorResource这个设置的颜色

  

3.3设置默认颜色

bottomNavigationBar
.setActiveColor("#ff0000") //设置选中的颜色
.setInActiveColor("#FFFFFF")//设置选中的颜色
.setBarBackgroundColor("#000000");//设置bar背景
in-active color:
表示未选中Item中的图标和文本颜色。默认为 Color.LTGRAY active color :
在BACKGROUND_STYLE_STATIC下,表示选中Item的图标和文本颜色。而在BACKGROUND_STYLE_RIPPLE下,表示整个容器的背景色。默认Theme's Primary Color background color :
在BACKGROUND_STYLE_STATIC下,表示整个容器的背景色。而在BACKGROUND_STYLE_RIPPLE下,表示选中Item的图标和文本颜色。默认 Color.WHITE

  

3.4定制Item的选中未选中颜色

//设置Item未选中颜色方法
new BottomNavigationItem().setInActiveColorResource(R.color.white)) 或者
new BottomNavigationItem().setInActiveColor()
//设置Item选中颜色方法
new BottomNavigationItem().setActiveColorResource()或者
new BottomNavigationItem().setActiveColor()

  

3.5Icon的定制

如果使用颜色的变化不足以展示一个选项Item的选中与非选中状态,可以使用BottomNavigationItem.setInActiveIcon()方法来设置。

 .addItem(new BottomNavigationItem(R.mipmap.menu,"菜单").setInActiveColor("#ffff00"))

3.6手动隐藏与显示

bottomNavigationBar.hide();//隐藏
bottomNavigationBar.hide(true);//隐藏是否启动动画,这里并不能自定义动画
bottomNavigationBar.unHide();//显示
bottomNavigationBar.hide(true);//隐藏是否启动动画,这里并不能自定义动画

  

3.7为Item添加Badge,一般用作消息提醒的

badgeItem = new TextBadgeItem()
.setBorderWidth(2)//Badge的Border(边界)宽度
.setBorderColor(Color.BLUE)//Badge的Border颜色
.setBackgroundColor(Color.RED)
.setTextColor(Color.BLACK)//文本颜色
.setGravity(Gravity.RIGHT| Gravity.TOP)//位置,默认右上角
.setAnimationDuration(2000)
.setHideOnSelect(true)//当选中状态时消失,非选中状态显示
.setText("99");
shapeBadgeItem=new 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案例

public class MainActivity extends AppCompatActivity implements BottomNavigationBar.OnTabSelectedListener {
private BottomNavigationBar bottomNavigationBar;
private HomeFragment homeFragment;
private PersonFragment personFragment;
private SettingFragment settingFragment;
private MenuFragment menuFragment;
private FragmentManager fm;
private TextBadgeItem badgeItem;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bottomNavigationBar=findViewById(R.id.bottom_nav_bar);
fm=getFragmentManager();
initBottomBar(); } private void initBottomBar() {
/**
* 导航基础设置 包括按钮选中效果 导航栏背景色等
*/
bottomNavigationBar.setTabSelectedListener(this)
.setMode(BottomNavigationBar.MODE_FIXED)
.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC)
.setActiveColor("#ffffff")//选中颜色
.setInActiveColor("#2B2B2B")//未选中颜色
.setBarBackgroundColor("#EDC18E");//导航栏背景色
badgeItem = new TextBadgeItem()
.setBorderWidth(2)//Badge的Border(边界)宽度
.setBorderColor(Color.BLUE)//Badge的Border颜色
.setBackgroundColor(Color.RED)
.setTextColor(Color.BLACK)//文本颜色
.setGravity(Gravity.RIGHT| Gravity.TOP)//位置,默认右上角
.setAnimationDuration(2000)
.setHideOnSelect(true)//当选中状态时消失,非选中状态显示
.setText("99"); /**
*添加导航按钮
*/
bottomNavigationBar.addItem(new BottomNavigationItem(R.mipmap.home,"首页"))
.addItem(new BottomNavigationItem(R.mipmap.setting,"设置"))
.addItem(new BottomNavigationItem(R.mipmap.menu,"菜单").setInActiveColor("#ffff00"))
.addItem(new BottomNavigationItem(R.mipmap.person,"个人").setBadgeItem(badgeItem))//添加小红点数据
.initialise();//initialise 一定要放在 所有设置的最后一项 //设置默认导航栏
homeFragment=HomeFragment.newInstance("首页");
fm.beginTransaction().replace(R.id.fl,homeFragment).commit(); }
/**
* 设置选中逻辑
*/
@Override
public void onTabSelected(int position) {
FragmentTransaction transaction = fm.beginTransaction();
switch (position){
case 0:
if(homeFragment==null){
homeFragment=new HomeFragment();
}
transaction.replace(R.id.fl,homeFragment);
break;
case 1:
if(settingFragment==null){
settingFragment=new SettingFragment();
}
transaction.replace(R.id.fl,settingFragment);
break;
case 2:
if(menuFragment==null){
menuFragment=new MenuFragment();
}
badgeItem.setText("4");
transaction.replace(R.id.fl,menuFragment);
break;
case 3:
if(personFragment==null){
personFragment=new PersonFragment();
}
transaction.replace(R.id.fl,personFragment);
break;
default: break;
}
transaction.commit();
} /**
* 设置未选中逻辑
*/
@Override
public void onTabUnselected(int position) { } /**
* 设置释放逻辑
*/
@Override
public void onTabReselected(int position) { }
}

  

参考:

1.Android底部导航 BottomNavigationBar(Google官方)

2.BottomNavigationBar使用详解

3.安卓 BottomNavigationBar 底部导航栏 最简单用法详解

底部导航栏使用BottomNavigationBar的更多相关文章

  1. Flutter - BottomNavigationBar底部导航栏切换后,状态丢失

    如果你用过BottomNavigationBar.TabBar.还有Drawer,你就会发现,在切换页面之后,原来的页面状态就会丢失. 要是上一页有一个数据列表,很多数据,你滚动到了下头,切换页面后, ...

  2. Flutter——BottomNavigationBar组件(底部导航栏组件)

    BottomNavigationBar常用的属性: 属性名 说明 items List<BottomNavigationBarItem> 底部导航条按钮集合 iconSize icon c ...

  3. Flutter 底部导航栏bottomNavigationBar

    实现一个底部导航栏,包含3到4个功能标签,点击对应的导航标签可以切换到对应的页面内容,并且页面抬头显示的内容也会跟着改变. 实际上由于手机屏幕大小的限制,底部导航栏的功能标签一般在3到5个左右,如果太 ...

  4. 【Flutter学习】基本组件之BottomNavigationBar底部导航栏

    一,概述 BottomNavigationBar即是底部导航栏控件,显示在页面底部的设计控件,用于在试图切换,底部导航栏包含多个标签.图标或者两者搭配的形式,简而言之提供了顶级视图之间的快速导航. 二 ...

  5. Flutter - 创建底部导航栏

    之前写过的一篇文章介绍了 Flutter - 创建横跨所有页面的侧滑菜单, 这次就一起来学习一下底部导航栏. 底部导航栏在ios平台上非常常见,app store就是这样的风格.还有就是大家最常用的微 ...

  6. 04-Flutter移动电商实战-打通底部导航栏

    关于界面切换以及底栏的实现可参考之前写的一篇文章:Flutter实 ViewPager.bottomNavigationBar界面切换 1.新建4个基本dart文件 在pages目录下,我们新建下面四 ...

  7. 03-Flutter移动电商实战-底部导航栏制作

    1.cupertino_IOS风格介绍 在Flutter里是有两种内置风格的: material风格: Material Design 是由 Google 推出的全新设计语言,这种设计语言是为手机.平 ...

  8. Flutter移动电商实战 --(4)打通底部导航栏

    关于界面切换以及底栏的实现可参考之前写的一篇文章:Flutter实 ViewPager.bottomNavigationBar界面切换 1.新建4个基本dart文件 在pages目录下,我们新建下面四 ...

  9. Flutter移动电商实战 --(3)底部导航栏制作

    1.cupertino_IOS风格介绍 在Flutter里是有两种内置风格的: material风格: Material Design 是由 Google 推出的全新设计语言,这种设计语言是为手机.平 ...

随机推荐

  1. day9-IO心得

    Gevent协程 Select\Poll\Epoll异步IO与事件驱动 Python连接Mysql数据库操作 RabbitMQ队列 Redis\Memcached缓存 Paramiko SSH Tws ...

  2. 26_java之进程|线程|线程池

    01进程概念 *A:进程概念 *a:进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行, 即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 02线程的概念 *A:线程的概 ...

  3. 怎么分辨linux是红帽还是Centos系统

    为什么需要分辨呢?因为centos是rhel的衍生版本,虎鼠傻傻你分不清楚!,你也可以使用yum,如果是rhel则报RHN disenable错!,还是用下面的专业些的command来搞吧! cat ...

  4. Eclipse/jre/jdk/jvm

    理清一下什么是 jre.jdk.jvm这几个容易混淆的东西. 直接在电脑下安装Eclipse,会提醒你缺少JVM. 1.JVM Java Virtual Machine(Java虚拟机)的缩写. 为了 ...

  5. 用C#操作IO端口1-用并口控制发光二极管

    什么是端口? 端口包含了一系列信号线, 通过这个端口CPU可以同其他外部设备交换数据, 比如我们经常见到的Modem,打印机等. 通常情况下, 打开的信号是”1”, 关闭的信号是”0”. 并口在同一时 ...

  6. windows共享连接显示无法打开

    Ping目标地址和名称可以连通,但是访问告知无法打开或找到名称,看凭据设置正常,重启无效. 判断:可能是由于凭据过期引起,更新凭据,重启,仍旧无效. 修改IP地址进行访问,成功打开. 清理网络连接状态 ...

  7. PHP - 闭包Closure和lambda function

    现在的语言没有闭包简直都不好意思说出来. 想要了解闭包是什么,那么就必须知道匿名函数.其实看起来他们其实差不多一个意思. 见php RFC一句话:   End of 2007 a patch was  ...

  8. pyinstaller 打包

    [root@mhc nsf]# pip install pyinstallerCollecting pyinstaller  Downloading PyInstaller-3.3.tar.gz (3 ...

  9. 使用OpenSsl自己CA根证书,二级根证书和颁发证书(亲测步骤)

    ---恢复内容开始--- 一.介绍 企业自用, 到证书机构签发证书的费用和时间等都可以省下..... SSl证书的背景功用.......(省略万字,不废话) 可以参考: SSL证书_百度百科 X509 ...

  10. solr的简单部署:在tomcat中启动slor

    1,首先要下载solr 途径1: 官网网址: http://lucene.apache.org/ 与Lucene的官网是一个 途径2: 下载历史版本的网址: http://archive.apache ...