【Android -- 开源库】BottomNavigation 的基本使用
一、简介
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 的基本使用相关推荐
- Android开源库集合(控件)
RecycleView: RecycleView功能增强 https://github.com/Malinskiy/SuperRecyclerView RecycleView功能增强(拖拽,滑动删除, ...
- 关于Android开源库分享平台,(GitClub)微信小程序的开发体验
七八月份的深圳一直在下雨,总有人说雨天适合窝在家看书,对于程序开发者来说更是难得的学习机会.我们502工作室的小伙伴利用这个时间学习了一下微信小程序开发,并上线了一个GitClub小程序,目前功能有些 ...
- Android 开源库获取途径整理
最新内容请见原文: http://www.trinea.cn/android/android-open-project-summary/ 介绍目前收藏 Android 开源库比较多的 GitHub 项 ...
- Android开源库集合(UI效果)
动画效果 粒子动画效果 https://github.com/glomadrian/Grav 水波式loading等待动画 https://github.com/race604/WaveLoading ...
- android 日历翻页动画,Android开源库合集:轻松实现Android动态,炫目:日历效果...
前言: 了解过那种动态,炫目的日历效果吗?你知道是怎么 操作的嘛?是否想过,用UI就可以实现,对,也许你说的对,不过UI只是都是动态效果的一部分.那么今天用Annroid开源库,来告诉你android ...
- Android开源库V - Layout:淘宝、天猫都在用的UI框架,赶紧用起来吧!
前言 V- Layout 是阿里出品的基础 UI 框架,用于快速实现页面的复杂布局,在手机天猫 Android版 内广泛使用 让人激动的是,在上个月V- Layout终于在Github上开源! Git ...
- GitHub 上排名前 100 的 Android 开源库介绍
转自:http://www.codeceo.com/article/github-top-100-android-libs.html 本项目主要对目前 GitHub 上排名前 100 的 Androi ...
- Android开源库总结
自己总结的Android开源项目及库. github排名https://github.com/trending, github搜索:https://github.com/search UI Aweso ...
- 排名前100的Android开源库
本项目主要对目前GitHub上排名前100的Android开源库进行简单的介绍,至于排名完全是根据GitHub搜索Java语言选择「BestMatch」得到的结果,然后过滤了跟Android不相关的项 ...
- GitHub 上排名前 100 的 Android 开源库进行简单的介绍
本文转载于:https://github.com/Freelander/Android_Data/blob/master/Android-Librarys-Top-100.md 本项目主要对目前 Gi ...
最新文章
- js获取php页面session的值,在html页面中取得session中的值的方法
- php 代码线程,php实现多线程代码
- java的字符定义_Java字符串定义及常用方法
- angular ts 表格_angular表格内容滚动实现
- Sonya and Robots(set应用)
- Google Chrome Frame 自定义渲染方式,调用ActiveX
- 深蓝超级计算机象棋人机大战,象棋人机大战绝唱:超级计算机“浪潮天梭”vs“象棋第一人”许银川的巅峰之战...
- 爬虫:深度爬取网易云音乐所有歌手及其对应热门歌曲
- 零售行业新渠道,效率居然这么高?
- 非飞行模式下,笔记本电脑不显示附近WiFi,并提示“适配器遇到与驱动程序或硬件相关的问题”——解决办法
- MacBook pro新手教程
- CSDN20181219博客黑板报
- 大数据夯实基础_2019_1_7
- 岁月留声的2015-F班破冰晚会
- 突变测试_什么是突变测试?
- RTD2173 USB-C Type-C/ DP 1.4 to HDMI 2.1 8K设计方案|替代RTD2173芯片|GSV6201可完全替代兼容 RTD2173
- 纯js实现在线文字识别,从图片中提取文本信息
- javaScript模板字符串、严格模式、编码字节长度
- (23)打鸡儿教你Vue.js
- 饥荒专用服务器全图显示代码,饥荒开全图代码
热门文章
- CSS CSS3 pdf 电子书大全 百度云
- SegmentFault 社区访谈 | Felix:一个如同空气般存在的人
- UVa 124 Following Orders
- ISBN(国际标准书号)
- C++游戏开发入门项目精选:制作经典游戏拳皇97
- HDOJ 1002 A + B Problem II 高精度的A+B问题
- oracle报1653解决办法,oracle 建立查询账号ORA 1653和ORA 01502错误处理方法
- 【英语学习】【WOTD】feisty 释义/词源/示例
- 【魔兽世界插件】魔兽世界插件实战笔记从入门到放弃的心理历程 第一节 lua框架的建立
- [LeetCode]739. 每日温度