BottomBar之Android底部菜单

前言:开源项目BottomBar,实现Android底部菜单(常用菜单,BottomBar实现动画(上下式)+消息菜单,BottomBar+ViewPager+Fragment实现炫酷的底部导航效果)

效果:

开发环境:AndroidStudio2.2.1+gradle-2.14.1

引入依赖:

  compile 'com.android.support:appcompat-v7:23.0.0'
compile 'com.android.support:design:23.+'
compile 'com.roughike:bottom-bar:1.3.+'

部分代码:

public class Menu1Activity extends AppCompatActivity {

    private BottomBar mBottomBar;
private MainFragment mMainFragment;
private TwoFragment twoFragment;
private ThreeFragment threeFragment;
private FourFragment fourFragment;
private FragmentTransaction transaction;
private BottomBarBadge unreadMessages; @Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
mBottomBar = BottomBar.attach(this, savedInstanceState);
// 千万注意:这个方法要用在 setItemsFromMenu 之前,也就是tab还没有设置之前要先调用,不然会报错。
mBottomBar.noTabletGoodness(); //添加初始Fragment
defaultFragment(null == mMainFragment ? mMainFragment = MainFragment.newInstance() : mMainFragment);
mBottomBar.setItems(R.menu.bottombar_menu);
mBottomBar.setOnMenuTabClickListener(new OnMenuTabClickListener() {
@Override
public void onMenuTabSelected(@IdRes int menuItemId) {
//单击事件 menuItemId 是 R.menu.bottombar_menu 中 item 的 id
switch (menuItemId) {
case R.id.bb_menu_main:
if (null == mMainFragment) {
mMainFragment = MainFragment.newInstance();
}
replaceFragment(mMainFragment);
break;
case R.id.bb_menu_chart:
if (null == twoFragment) {
twoFragment = TwoFragment.newInstance();
}
replaceFragment(twoFragment);
unreadMessages.setVisibility(View.GONE);
break;
case R.id.bb_menu_timeline:
if (null == threeFragment) {
threeFragment = ThreeFragment.newInstance();
}
replaceFragment(threeFragment);
break;
case R.id.bb_menu_about:
if (null == fourFragment) {
fourFragment = FourFragment.newInstance();
}
replaceFragment(fourFragment);
break;
default:
break;
}
} @Override
public void onMenuTabReSelected(@IdRes int menuItemId) {
//重选事件,当前已经选择了这个,又点了这个tab。微博点击首页刷新页面
}
});
// 当点击不同按钮的时候,设置不同的颜色
// 可以用以下三种方式来设置颜色.
mBottomBar.mapColorForTab(0, ContextCompat.getColor(this, R.color.colorPrimary));
mBottomBar.mapColorForTab(1, ContextCompat.getColor(this, R.color.colorAccent));
mBottomBar.mapColorForTab(2, ContextCompat.getColor(this, R.color.green));
mBottomBar.mapColorForTab(3, ContextCompat.getColor(this, R.color.orange));
setMsg();
} @Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//保存BottomBar的状态
mBottomBar.onSaveInstanceState(outState);
} private void replaceFragment(Fragment fragment) {
FragmentManager fm = getSupportFragmentManager();
transaction = fm.beginTransaction();
transaction.replace(R.id.main_fragment_layout, fragment);
// transaction.hide();
transaction.commit(); } private void defaultFragment(Fragment fragment) {
FragmentManager fm = getSupportFragmentManager();
transaction = fm.beginTransaction();
transaction.add(R.id.main_fragment_layout, fragment);
transaction.commit();
} private void setMsg() {
// 为tab设置一个标签,“信息”提示的数字
// 参数分别是:第几个tab;小圆圈的颜色;显示的数字
unreadMessages = mBottomBar.makeBadgeForTabAt(1, "#FF0000", 13); // 设置显示或隐藏
unreadMessages.show();
// unreadMessages.hide();
// 设置显示的数字
unreadMessages.setCount(4); // 设置显示/消失动画的延迟时间
unreadMessages.setAnimationDuration(200); // 如果不点它,它一直显示
unreadMessages.setAutoShowAfterUnSelection(true);
}

源码下载...

最新文章

  1. c#程序如何从海康ipserver查询获取DVR设备ip地址
  2. Sql Server系列:数据表操作
  3. Oracle分析函数(一)
  4. QM04-生产中的QM
  5. git 工具
  6. 2013多校联合2 I Warm up 2(hdu 4619)
  7. FineUIMvc随笔(5)UIHelper是个什么梗?
  8. 判断python对象是否可调用的三种方式及其区别
  9. 在form里面,放了四个UEditor,怎么在后台分别获取它们值
  10. Tomcat 8启动速度慢原因1: At least one JAR was scanned for TLDs yet contained no TLDs
  11. 使用jQuery AJAX读取二进制数据
  12. javascript之DOM编程正则表达式引入
  13. Python用可变参数找出最大值和最小值
  14. Docker:测试环境的准备-建立一台centos测试机
  15. cordova window error
  16. WebStorm for Mac(Web 前端开发工具)破解版安装
  17. 【问题解决】docker中创建volume时,无访问权限
  18. 2015年传智播客JavaEE 第168期就业班视频教程14-登录功能需求分析+模块结构命名规范
  19. Kibana6.x.x源码分析--import相关说明
  20. python应用:经纬度匹配

热门文章

  1. [CQOI2015]标识设计
  2. POJ_2886 Who Gets the Most Candies? 【二分+树状数组】
  3. SD341X-SD343H管网法兰式伸缩蝶阀厂家,SD341X-SD343H管网法兰式伸缩蝶阀价格 - 专题栏目 - 无极资讯网
  4. input标签的按钮效果
  5. 使用discover批量执行用例
  6. 怎么用代码弹回 UITableView 中左滑出来的删除按钮
  7. blender
  8. ASP.NET Web API根据代码注释生成Help文档
  9. Centos 从零开始 (一)
  10. Gradle 学习(一)