×

Android底部导航 BottomNavigationBar(Google官方)

陪你唠嗑 关注 2017.05.02 22:07* 字数 898 阅读 9331 评论 7

github地址(完整Demo下载)

https://github.com/zhouxu88/BottomNavigationBar

简介

Android之前一直没有官方的底部导航栏,自己实现也是各有招数,不过不久前,Google官方在自己推出的Material design中增加了BottomNavigationBar这个底部导航。

效果图:

底部导航1.png

基本使用

1、添加依赖

compile 'com.ashokvarma.android:bottom-navigation-bar:1.4.1'

2、在布局文件中,添加布局

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.zx.bottomnavigationview.MainActivity">        <android.support.v4.view.ViewPager            android:id="@+id/viewPager"            android:layout_width="match_parent"            android:layout_height="0dp"            android:layout_weight="1"/>        <com.ashokvarma.bottomnavigation.BottomNavigationBar            android:id="@+id/bottom_navigation_bar"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_gravity="bottom" />LinearLayout>

3、在代码中为BottomNavigationBar添加Item选项以及相关的属性设置

 bottomNavigationBar = (BottomNavigationBar) findViewById(R.id.bottom_navigation_bar); bottomNavigationBar.setTabSelectedListener(this); badgeItem = new BadgeItem().setBackgroundColor(Color.RED).setText("99");bottomNavigationBar.setMode(BottomNavigationBar.MODE_FIXED);bottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC);bottomNavigationBar.setBarBackgroundColor(R.color.black); bottomNavigationBar.addItem(new BottomNavigationItem(R.drawable.ic_home_white_24dp, "首页").setActiveColorResource(R.color.white))                .addItem(new BottomNavigationItem(R.drawable.ic_music_note_white_24dp, "音乐").setActiveColorResource(R.color.white))                .addItem(new BottomNavigationItem(R.drawable.ic_tv_white_24dp, "电影").setActiveColorResource(R.color.white).setBadgeItem(badgeItem))                .addItem(new BottomNavigationItem(R.drawable.ic_videogame_asset_white_24dp, "游戏").setActiveColorResource(R.color.white))                .setFirstSelectedPosition(0)                .initialise(); //所有的设置需在调用该方法前完成

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) {//选中 -> 选中         }     });

三、知识点、用法说明

1、BottomNavigationBar有2个重要的点:Mode和Background Style

Mode
xml:bnbMode
方法:setMode()
包含3种Mode:

  • MODE_DEFAULT
    如果Item的个数<=3就会使用MODE_FIXED模式,否则使用MODE_SHIFTING模式

  • MODE_FIXED (固定大小
    。填充模式,未选中的Item会显示文字,没有换挡动画。
    。宽度=总宽度/action个数
    。最大宽度: 168dp
    。最小宽度: 80dp
    。Padding:6dp(8dp)、10dp、12dp
    。字体大小:12sp、14sp

  • MODE_SHIFTING (不固定大小
    。换挡模式,未选中的Item不会显示文字,选中的会显示文字。在切换的时候会有一个像换挡的动画

。Active view :Maximum: 168dp 、Minimum: 96dp
。Inactive view:Maximum: 96dp、Minimum: 56dp
。Padding:6dp above icon (active view), 16dp above and below icon (inactive view) 10dp under text

Background Style
xml: bnbBackgroundStyle
方法:setBackgroundStyles()
包含3种Style:

  • 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这个设置的颜色

注意:要想设置底部导航的背景颜色有效果,必须是如下的配置

bottomNavigationBar.setMode(BottomNavigationBar.MODE_FIXED);bottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC);bottomNavigationBar.setBarBackgroundColor(R.color.black); //换成你的背景色即可

2、设置默认颜色
xml:bnbActiveColor, bnbInactiveColor, bnbBackgroundColor
方法:setActiveColor, setInActiveColor, setBarBackgroundColor

bottomNavigationBar              .setActiveColor("#ff0000") //设置选中的颜色              .setInActiveColor("#FFFFFF")              .setBarBackgroundColor("#000000")
  • 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、定制Item的选中未选中颜色
我们可以为每个Item设置选中未选中的颜色,如果没有设置,将继承BottomNavigationBar设置的选中未选中颜色。

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

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

 new BottomNavigationItem(R.drawable.ic_home_white_24dp, "公交")//这里表示选中的图片         .setInactiveIcon(ContextCompat.getDrawable(this,R.mipmap.ic_launcher));//非选中的图片

5、手动隐藏与显示
我们可以在任何时间,通过代码隐藏或显示BottomNavigationBar
方法:

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

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

Paste_Image.png

BadgeItem badge=new BadgeItem()
// .setBorderWidth(2)//Badge的Border(边界)宽度
// .setBorderColor(“#FF0000”)//Badge的Border颜色
// .setBackgroundColor(“#9ACD32”)//Badge背景颜色
// .setGravity(Gravity.RIGHT| Gravity.TOP)//位置,默认右上角
.setText(“2”)//显示的文本
// .setTextColor(“#F0F8FF”)//文本颜色
// .setAnimationDuration(2000)
// .setHideOnSelect(true)//当选中状态时消失,非选中状态显示

new BottomNavigationItem(R.mipmap.ic_directions_bike_white_24dp, “骑行”).setBadgeItem(badge) //为item添加角标

参考:
Google官方 BottomNavigationBar

底部导航 Bottom navigation

更多相关文章

  1. 设置Activity全屏
  2. 一个不错的启动菜单显示屏动画效果
  3. MaterialDesign系列文章(六)沉浸式状态栏的使用
  4. Android(安卓)应用语言设置的实现
  5. Android(安卓)字体自适应设置
  6. Android(安卓)基础
  7. 如何让Android字体自适应屏幕分辨率
  8. 管理Android通信录
  9. EditText所有属性详解

随机推荐

  1. android 复制、剪切、粘贴
  2. Android全屏显示的两种方式
  3. android前后摄像头切换
  4. Android自定义进度条
  5. TabHost布局及新浪式TabHost布局
  6. Android——天气预报(酷欧天气)(第二篇)
  7. 开始开发Android的使用Eclipse
  8. Android简易实战教程--第三十九话《Chron
  9. android英语字典(内含源码哦)
  10. Android(安卓)SDK Manager更新不了的解决