一、简介

BottomNavigation 一个优秀的底部导航栏。
该库可帮助用户轻松使用底部导航栏(谷歌的一种新模式)并允许大量自定义

效果图

二、引入框架

1. 在 app/build.gradle 中添加:

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

三、使用

1. 布局文件

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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=".ui.BottomNavigationActivity"><includeandroid:id="@+id/include4"layout="@layout/layout_toolbar"/><FrameLayoutandroid:id="@+id/fl_content"android:layout_width="match_parent"android:layout_height="match_parent"app:layout_constraintBottom_toTopOf="@+id/bottom_navigation_bar"app:layout_constraintTop_toBottomOf="@+id/include4" /><com.ashokvarma.bottomnavigation.BottomNavigationBarandroid:id="@+id/bottom_navigation_bar"android:layout_width="match_parent"android:layout_height="wrap_content"app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

2. java 代码
BottomNavigationActivity.java

public class BottomNavigationActivity extends BaseActivity implements BottomNavigationBar.OnTabSelectedListener {@BindView(R.id.bottom_navigation_bar)BottomNavigationBar mNavigationBar;private InviteFragment mInviteFragment = HomeFragmentFactory.getInstance().getInviteFragment();private ActivityFragment mActivityFragment = HomeFragmentFactory.getInstance().getActivityFragment();private FoundFragment mFoundFragment = HomeFragmentFactory.getInstance().getFoundFragment();private MineFragment mMineFragment = HomeFragmentFactory.getInstance().getMineFragment();private Fragment currentFragment = new Fragment();
//    private TextBadgeItem mBadgeItem;private FragmentManager fm;@Overrideprotected int getLayoutId() {return R.layout.activity_bottom_navigation;}@Overrideprotected void setToolbar() {}@Overrideprotected void initView() {setNavTitle(R.string.bottom_navigation);fm = getSupportFragmentManager();initBottomBar();}private void initBottomBar() {/*** 导航基础设置 包括按钮选中效果 导航栏背景色等*/mNavigationBar.setTabSelectedListener(this).setMode(BottomNavigationBar.MODE_FIXED).setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC).setActiveColor("#F5DF3E")//选中颜色.setInActiveColor("#000000")//未选中颜色.setBarBackgroundColor("#ffffff");//导航栏背景色
//        mBadgeItem = 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("9");setInvite();}/*** 切换fragment** @param targetFragment* @return*/private FragmentTransaction switchFragment(Fragment targetFragment) {FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();if (!targetFragment.isAdded()) {// 第一次使用switchFragment()时currentFragment为null,所以要判断一下if (currentFragment != null) {transaction.hide(currentFragment);}transaction.add(R.id.fl_content, targetFragment, targetFragment.getClass().getName());} else {transaction.hide(currentFragment).show(targetFragment);}currentFragment = targetFragment;return transaction;}/*** 邀请*/private void setInvite() {mNavigationBar.clearAll();switchFragment(mInviteFragment).commitNowAllowingStateLoss();mNavigationBar.addItem(new BottomNavigationItem(R.mipmap.icon_invite_nor,"邀约")).addItem(new BottomNavigationItem(R.mipmap.icon_activity_nor,"活动")).addItem(new BottomNavigationItem(R.mipmap.icon_find_nor,"发现")).addItem(new BottomNavigationItem(R.mipmap.icon_my_nor,"我的")).setFirstSelectedPosition(0).initialise();}/*** 活动*/private void setActivity() {mNavigationBar.clearAll();switchFragment(mActivityFragment).commitNowAllowingStateLoss();mNavigationBar.addItem(new BottomNavigationItem(R.mipmap.icon_invite_nor,"邀约")).addItem(new BottomNavigationItem(R.mipmap.icon_activity_nor,"活动")).addItem(new BottomNavigationItem(R.mipmap.icon_find_nor,"发现")).addItem(new BottomNavigationItem(R.mipmap.icon_my_nor,"我的")).setFirstSelectedPosition(1).initialise();}/*** 发现*/private void setFound() {mNavigationBar.clearAll();switchFragment(mFoundFragment).commitNowAllowingStateLoss();mNavigationBar.addItem(new BottomNavigationItem(R.mipmap.icon_invite_nor,"邀约")).addItem(new BottomNavigationItem(R.mipmap.icon_activity_nor,"活动")).addItem(new BottomNavigationItem(R.mipmap.icon_find_nor,"发现")).addItem(new BottomNavigationItem(R.mipmap.icon_my_nor,"我的")).setFirstSelectedPosition(2).initialise();}/*** 我的*/private void setMine() {mNavigationBar.clearAll();switchFragment(mMineFragment).commitNowAllowingStateLoss();mNavigationBar.addItem(new BottomNavigationItem(R.mipmap.icon_invite_nor,"邀约")).addItem(new BottomNavigationItem(R.mipmap.icon_activity_nor,"活动")).addItem(new BottomNavigationItem(R.mipmap.icon_find_nor,"发现")).addItem(new BottomNavigationItem(R.mipmap.icon_my_nor,"我的")).setFirstSelectedPosition(3).initialise();}@Overridepublic void onTabSelected(int position) {FragmentTransaction ft = fm.beginTransaction();switch (position) {case 0:setInvite();break;case 1:setActivity();break;case 2:setFound();break;case 3:setMine();break;}}@Overridepublic void onTabUnselected(int position) {}@Overridepublic void onTabReselected(int position) {}
}

四个类似的Fragment , ActivityFragment.java

public class ActivityFragment extends BaseFragment {@Overrideprotected int getLayoutId() {return R.layout.fragment_activity;}
}

HomeFragmentFactory.java

/*** Created on 2019/12/2 16:44** @author Gong Youqiang*/
public class HomeFragmentFactory {static HomeFragmentFactory mInstance;private InviteFragment mInviteFragment;private ActivityFragment mActivityFragment;private FoundFragment mFoundFragment;private MineFragment mMineFragment;public HomeFragmentFactory() {}public static HomeFragmentFactory getInstance() {if (mInstance == null) {synchronized (HomeFragmentFactory.class) {if (mInstance == null) {mInstance = new HomeFragmentFactory();}}}return mInstance;}/*** 邀请** @return*/public InviteFragment getInviteFragment() {if (mInviteFragment == null) {synchronized (InviteFragment.class) {if (mInviteFragment == null) {mInviteFragment = new InviteFragment();}}}return mInviteFragment;}/*** 活动** @return*/public ActivityFragment getActivityFragment() {if (mActivityFragment == null) {synchronized (ActivityFragment.class) {if (mActivityFragment == null) {mActivityFragment = new ActivityFragment();}}}return mActivityFragment;}/*** 发现** @return*/public FoundFragment getFoundFragment() {if (mFoundFragment == null) {synchronized (FoundFragment.class) {if (mFoundFragment == null) {mFoundFragment = new FoundFragment();}}}return mFoundFragment;}/*** 我的** @return*/public MineFragment getMineFragment() {if (mMineFragment == null) {synchronized (MineFragment.class) {if (mMineFragment == null) {mMineFragment = new MineFragment();}}}return mMineFragment;}
}

【Android -- 开源库】BottomNavigation 的基本使用相关推荐

  1. Android开源库集合(控件)

    RecycleView: RecycleView功能增强 https://github.com/Malinskiy/SuperRecyclerView RecycleView功能增强(拖拽,滑动删除, ...

  2. 关于Android开源库分享平台,(GitClub)微信小程序的开发体验

    七八月份的深圳一直在下雨,总有人说雨天适合窝在家看书,对于程序开发者来说更是难得的学习机会.我们502工作室的小伙伴利用这个时间学习了一下微信小程序开发,并上线了一个GitClub小程序,目前功能有些 ...

  3. Android 开源库获取途径整理

    最新内容请见原文: http://www.trinea.cn/android/android-open-project-summary/ 介绍目前收藏 Android 开源库比较多的 GitHub 项 ...

  4. Android开源库集合(UI效果)

    动画效果 粒子动画效果 https://github.com/glomadrian/Grav 水波式loading等待动画 https://github.com/race604/WaveLoading ...

  5. android 日历翻页动画,Android开源库合集:轻松实现Android动态,炫目:日历效果...

    前言: 了解过那种动态,炫目的日历效果吗?你知道是怎么 操作的嘛?是否想过,用UI就可以实现,对,也许你说的对,不过UI只是都是动态效果的一部分.那么今天用Annroid开源库,来告诉你android ...

  6. Android开源库V - Layout:淘宝、天猫都在用的UI框架,赶紧用起来吧!

    前言 V- Layout 是阿里出品的基础 UI 框架,用于快速实现页面的复杂布局,在手机天猫 Android版 内广泛使用 让人激动的是,在上个月V- Layout终于在Github上开源! Git ...

  7. GitHub 上排名前 100 的 Android 开源库介绍

    转自:http://www.codeceo.com/article/github-top-100-android-libs.html 本项目主要对目前 GitHub 上排名前 100 的 Androi ...

  8. Android开源库总结

    自己总结的Android开源项目及库. github排名https://github.com/trending, github搜索:https://github.com/search UI Aweso ...

  9. 排名前100的Android开源库

    本项目主要对目前GitHub上排名前100的Android开源库进行简单的介绍,至于排名完全是根据GitHub搜索Java语言选择「BestMatch」得到的结果,然后过滤了跟Android不相关的项 ...

  10. GitHub 上排名前 100 的 Android 开源库进行简单的介绍

    本文转载于:https://github.com/Freelander/Android_Data/blob/master/Android-Librarys-Top-100.md 本项目主要对目前 Gi ...

最新文章

  1. js获取php页面session的值,在html页面中取得session中的值的方法
  2. php 代码线程,php实现多线程代码
  3. java的字符定义_Java字符串定义及常用方法
  4. angular ts 表格_angular表格内容滚动实现
  5. Sonya and Robots(set应用)
  6. Google Chrome Frame 自定义渲染方式,调用ActiveX
  7. 深蓝超级计算机象棋人机大战,象棋人机大战绝唱:超级计算机“浪潮天梭”vs“象棋第一人”许银川的巅峰之战...
  8. 爬虫:深度爬取网易云音乐所有歌手及其对应热门歌曲
  9. 零售行业新渠道,效率居然这么高?
  10. 非飞行模式下,笔记本电脑不显示附近WiFi,并提示“适配器遇到与驱动程序或硬件相关的问题”——解决办法
  11. MacBook pro新手教程
  12. CSDN20181219博客黑板报
  13. 大数据夯实基础_2019_1_7
  14. 岁月留声的2015-F班破冰晚会
  15. 突变测试_什么是突变测试?
  16. RTD2173 USB-C Type-C/ DP 1.4 to HDMI 2.1 8K设计方案|替代RTD2173芯片|GSV6201可完全替代兼容 RTD2173
  17. 纯js实现在线文字识别,从图片中提取文本信息
  18. javaScript模板字符串、严格模式、编码字节长度
  19. (23)打鸡儿教你Vue.js
  20. 饥荒专用服务器全图显示代码,饥荒开全图代码

热门文章

  1. CSS CSS3 pdf 电子书大全 百度云
  2. SegmentFault 社区访谈 | Felix:一个如同空气般存在的人
  3. UVa 124 Following Orders
  4. ISBN(国际标准书号)
  5. C++游戏开发入门项目精选:制作经典游戏拳皇97
  6. HDOJ 1002 A + B Problem II 高精度的A+B问题
  7. oracle报1653解决办法,oracle 建立查询账号ORA 1653和ORA 01502错误处理方法
  8. 【英语学习】【WOTD】feisty 释义/词源/示例
  9. 【魔兽世界插件】魔兽世界插件实战笔记从入门到放弃的心理历程 第一节 lua框架的建立
  10. [LeetCode]739. 每日温度