大部分app,都采用导航栏的方式,无论是顶部导航栏还是底部导航栏,这是一个app的根骨,本文是采用Google最近添加到Material design中的底部导航栏BottomNavigationBar控件,效果好,UI美观,而且有很多效果,下面就来简单介绍一下。

先上图:

            

代码添加:

1、引入Navigation的包:

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

2、java代码部分

public class MainActivity extends AppCompatActivity implements BottomNavigationBar.OnTabSelectedListener{private int lastSelectedPosition;private int mHomeMessage;private BottomNavigationBar bottomNavigationBar;private BadgeItem mHomeNumberBadgeItem,mMusicNumberBadgeItem;private HomeFragment mHomeFragment;private BookFragment mBookFragment;private MusicFragment mMusicFragment;private FavoriteFragment mFavoriteFragment;private FragmentManager mFragmentManager;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();setDefaultFragment();}private void initView(){/***添加标签的消息数量*/mHomeNumberBadgeItem = new BadgeItem().setBorderWidth(2).setBackgroundColor(Color.RED).setText("").setHideOnSelect(false); // TODO 控制便签被点击时 消失 | 不消失/***添加标签的消息数量*/mMusicNumberBadgeItem = new BadgeItem().setBorderWidth(2).setBackgroundColor(Color.RED).setText("99+").setHideOnSelect(true);bottomNavigationBar = (BottomNavigationBar) findViewById(R.id.bottom_navigation_bar);// TODO 设置模式bottomNavigationBar.setMode(BottomNavigationBar.MODE_FIXED);// TODO 设置背景色样式bottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_RIPPLE);bottomNavigationBar.setTabSelectedListener(this);bottomNavigationBar.addItem(new BottomNavigationItem(R.mipmap.ic_home_white_24dp, "Home").setActiveColorResource(R.color.orange).setBadgeItem(mHomeNumberBadgeItem)).addItem(new BottomNavigationItem(R.mipmap.ic_book_white_24dp, "Books").setActiveColorResource(R.color.teal)).addItem(new BottomNavigationItem(R.mipmap.ic_music_note_white_24dp, "Music").setActiveColorResource(R.color.blue).setBadgeItem(mMusicNumberBadgeItem)).addItem(new BottomNavigationItem(R.mipmap.ic_favorite_white_24dp, "Favorite").setActiveColorResource(R.color.brown)).setFirstSelectedPosition(lastSelectedPosition).initialise();// TODO 设置 BadgeItem 默认隐藏 注意 这句代码在添加 BottomNavigationItem 之后mHomeNumberBadgeItem.hide();}private void setDefaultFragment() {mFragmentManager = getSupportFragmentManager();FragmentTransaction transaction = mFragmentManager.beginTransaction();mHomeFragment = mHomeFragment.newInstance("HomeFragment");transaction.add(R.id.tb, mHomeFragment);transaction.commit();}@Overridepublic void onTabSelected(int position) {lastSelectedPosition = position;//开启事务FragmentTransaction transaction = mFragmentManager.beginTransaction();hideFragment(transaction);/*** fragment 用 add + show + hide 方式* 只有第一次切换会创建fragment,再次切换不创建** fragment 用 replace 方式* 每次切换都会重新创建**/switch (position) {case 0:if (mHomeFragment == null) {mHomeFragment = mHomeFragment.newInstance("HomeFragment");transaction.add(R.id.tb, mHomeFragment);}else{transaction.show(mHomeFragment);}
//                transaction.replace(R.id.tb, mHomeFragment);break;case 1:if (mBookFragment == null) {mBookFragment = BookFragment.newInstance("mBookFragment");transaction.add(R.id.tb, mBookFragment);}else{transaction.show(mBookFragment);}
//                transaction.replace(R.id.tb, mBookFragment);break;case 2:if (mMusicFragment == null) {mMusicFragment = MusicFragment.newInstance("mMusicFragment");transaction.add(R.id.tb, mMusicFragment);}else{transaction.show(mMusicFragment);}
//                transaction.replace(R.id.tb, mMusicFragment);break;case 3:if (mFavoriteFragment == null) {mFavoriteFragment = FavoriteFragment.newInstance("mFavoriteFragment");transaction.add(R.id.tb, mFavoriteFragment);}else{transaction.show(mFavoriteFragment);}
//                transaction.replace(R.id.tb, mFavoriteFragment);break;default:break;}// 事务提交transaction.commit();}/*** 隐藏当前fragment* @param transaction*/private void hideFragment(FragmentTransaction transaction){if (mHomeFragment != null){transaction.hide(mHomeFragment);}if (mBookFragment != null){transaction.hide(mBookFragment);}if (mMusicFragment != null){transaction.hide(mMusicFragment);}if (mFavoriteFragment != null){transaction.hide(mFavoriteFragment);}}@Overridepublic void onTabUnselected(int position) {}@Overridepublic void onTabReselected(int position) {}public void addMessage(){mHomeMessage ++ ;mHomeNumberBadgeItem.setText(mHomeMessage + "");mHomeNumberBadgeItem.show();}
}

注意先设置模式和背景样式,在添加NavigationItem,还有注意 标签的显示隐藏,代码里注释也很详细了

3、布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.zs.test.bottomnavigationbardemo.MainActivity"><LinearLayoutandroid:id="@+id/tb"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" /><com.ashokvarma.bottomnavigation.BottomNavigationBarandroid:layout_gravity="bottom"android:id="@+id/bottom_navigation_bar"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"/>
</RelativeLayout>

Android 底部导航栏 BottomNavigationBar相关推荐

  1. android fragment 底部菜单栏,一句话搞定Android底部导航栏,一键绑定Fragment、ViewPager...

    现在大多数App都会用到底部导航栏,比如常见的聊天工具QQ.微信.购物App等等,有了底部导航栏,用户可以随时切换界面,查看不同的内容.它的实现方式也很多,以前大多使用TabHost来实现,但是现在我 ...

  2. android 固定底部导航,如何设置android底部导航栏位置固定在android

    请帮我设置底部导航栏位置固定在底部, ,因为我在输入editText字段时遇到问题,底部导航栏向上移动并覆盖其他领域如何设置android底部导航栏位置固定在android 代码: xmlns:and ...

  3. Flutter底部导航栏BottomNavigationBar页面状态保持解决方案

    网易云[玩转大前端]配套课程 EDU配套 教程 Flutter开发的点滴积累系列文章 一行代代码置灰应用?对就是这么干 在实际应用开发中,一般应用的首页面会有这种结构,在Flutter应用开发中,有多 ...

  4. 转载:Android底部导航栏,三种风格和实现

    原文出处 标题:Android底部导航栏,三种风格和实现 作者:阿飞__ 原文链接:Android底部导航栏,三种风格和实现_阿飞__的博客-CSDN博客_android导航栏 一.效果图展示 如果动 ...

  5. Android底部导航栏的三种风格实现

    一.效果图展示 如果动图没有动的话,也可以看下面这个静态图 以下挨个分析每个的实现,这里只做简单的效果展示,大家可以基于目前代码做二次开发. 二.BottomNavigationView 这是 Goo ...

  6. Android底部导航栏切换页面填坑

    ** Android底部导航栏切换页面填坑 ** 这个效果的实现关键点就是给选项赋予两种状态,focused和normal,在主程序中用监听判断是否被选中,就给被选中的选项设focused为true, ...

  7. Android底部导航栏最常用的两种写法

    先来看看底部导航栏的效果 Android 底部导航栏有很多种写法,例如: RadioGroup , Tablayout, TabHost  , LinearLayout + ImageView + T ...

  8. Android底部导航栏+消息提醒

    Android底部导航栏+消息提醒 最近想在网上找一些Android底部导航栏切换并能提供消息提醒的案例,虽然有很多案例但都不是我想要的.我就开始自己瞎研究了,废话不多说了,直接上代码. 1.先创建一 ...

  9. Flutter底部导航栏BottomNavigationBar

    BottomNavigationBar是底部的导航栏,一般应用在多个视图进行选择.类比于Android的底部导航栏,由Text文本和Icon图标组成. 这里创建一个List为显示内容提供容器: sta ...

最新文章

  1. 2021-03-19注解是分功能模块的@ReuqestMapping注解需要依赖的jar为jar-web ,@Autowired注解依赖的是springframework包
  2. 设计思维的要素:优化愿景(Vision)
  3. 产品问答 | PM最应该花时间做这件事……
  4. 【CodeForces - 569A】Music (数学公式化简,模拟追及问题)
  5. 物流机器人小车的运动控制与定位
  6. linux下mysql5.7的安装教程_linux下mysql 5.7.18安装教程 邯郸
  7. sqlplus登录问题
  8. linux 脚本做成服务,Shell脚本注册到Linux系统服务实例
  9. 【To Understand】动态规划:求最长公共子串/最长公共子序列
  10. VOS2009_2.1.2.0的安装教程
  11. RFM用户分层模型|原理+Python全流程实现
  12. 20 个有用的 Go 语言微服务开发框架吐血总结!!!
  13. 如何修复cdn服务器异常,cdn服务器连接异常解决方法
  14. LOJ#2155. 「POI2011 R1」同谋者 Conspiracy
  15. [游戏安全] Unity3D游戏无意中的发现
  16. 培训班和科班出来的程序员有什么不同之处?看完这个你就能明白!
  17. 汉字风格迁移篇--KAGAN:一种中国诗歌风格转换的方法
  18. 人工智能方向毕业设计_人工智能时代,理工科专业的毕业设计都被安排了
  19. 大话UWB技术之核心命脉:TDOA与TOF
  20. *和multiply

热门文章

  1. 解决Antimalware Service Executable(windows defender)占用过高CPU和内存的方法
  2. 关于小红书的小程序不同数量的轮播图,展示不一样的轮播指示点的实现
  3. arduino烧写失败,给Arduino烧录引导程序,出现以下错误,到底是什么原因导致的。知道的高手请帮忙...
  4. matlab中乘法“*”和点乘“.*”;除法“/”和点除“./”的联系和区别。
  5. 云南新开普智慧校园一卡通解决方案,K12智慧校园信息化建设解决方案
  6. 求助大神 VMware 卸载
  7. kubernetes缔造者Craig McLuckie谈:有效的产品管理
  8. pe下bootice修复Linux引导,pe下修复引导不成功?这种方法才是最有效的解决方法...
  9. 2020年广东省中高级工程师职称评定条件要求和通知
  10. element-ui dialog组件添加可拖拽位置 可拖拽宽高