Home

Awesome

Android-NavMenu-master

一个底部导航栏, 实现了显示未读消息数, 显示红点等效果的封装。

添加依赖

1. 在项目根目录的 build.gradle 中添加

allprojects {
   repositories {
          ...
    maven { url 'https://jitpack.io' }
   }
}

2. 在项目的 build.gradle 中添加

 compile 'com.github.smashinggit:Android-NavMenuLayout:v1.0.0'

如何使用

1. 普通用法

第一步, 在xml文件中添加控件

在xml中的跟布局添加  xmxmlns:app="http://schemas.android.com/apk/res-auto"


<com.git.navmenu.NavMenuLayout
    android:id="@+id/nav_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:menuCount="3" />

注:

 app:menuCount="3" 属性是必须要添加的,代表底部菜单的数量,此数值必须要与 Activity 中设置的图片资源,文字资源的数量一致,
 否则无法正常显示

              

第二步, 在Activity中设置数据

  private int[] iconRes = {R.mipmap.ic_home_normal, R.mipmap.ic_managemoney_normal, R.mipmap.ic_me_normal};
  private int[] iconResSelected = {R.mipmap.ic_home_selected, R.mipmap.ic_managemoney_select, R.mipmap.ic_me_select};
  private String[] textRes = {"首页", "理财", "个人中心"};
  
  
    mNavMenuLayout.setIconRes(iconRes)//设置未选中图标
            .setIconResSelected(iconResSelected)//设置选中图标
            .setTextRes(textRes)//设置文字
            .setSelected(0);//设置选中的位置

注:

 setSelected(int position)方法一定要放在最后调用,因为在该方法中实现了刷新页面的功能,其他的几个方法都只是进行了赋值操作,
 并没有刷新页面;
 

效果图

2. 带消息提示的用法

显示消息或红点提示

   mNavMenuLayout.setIconRes(iconRes)//设置未选中图标
                 .setIconResSelected(iconResSelected)//设置选中图标
                 .setTextRes(textRes)//设置文字
                 .setMsg(0, "99+")//设置显示消息
                 .setMsg(1, "NEW")//设置显示消息
                 .showRedPoint(2)//设置显示红点
                 .setSelected(0);//设置选中的位置
                 

注:

  setMsg(int position,String msg) 方法,第一个参数代表底部菜单的位置,第二个参数代表显示的内容
  showRedPoint(int position)方法,参数代表底部菜单的位置
  

取消消息或红点提示

mNavMenuLayout .hideMsg(0)//隐藏消息
               .hideMsg(1)//隐藏消息
               .hideRedPoint(2)//隐藏红点
                  

注:

hideMsg(int position)参数代表底部菜单位置
hideRedPoint(int position)同上

效果图

3. 点击事件

 //选中的点击事件
    mNavMenuLayout.setOnItemSelectedListener(new NavMenuLayout.OnItemSelectedListener() {
        @Override
        public void onItemSelected(int position) {
            mViewPager.setCurrentItem(position);//选中后切换viwepager
            Toast.makeText(MainActivity.this, "选中了-> " + textRes[position], Toast.LENGTH_SHORT).show();
        }
    });
    //已选中状态下的点击事件
    mNavMenuLayout.setOnItemReSelectedListener(new NavMenuLayout.OnItemReSelectedListener() {
        @Override
        public void onItemReSelected(int position) {
            Toast.makeText(MainActivity.this, "重复选中了-> " + textRes[position], Toast.LENGTH_SHORT).show();
        }
    });
    

注:

点击事件分为2种:
setOnItemSelectedListener   代表的是当一个 item 由 未选中状态 变成 选中状态 时的回调
setOnItemReSelectedListener 代表的是当一个 item 已经是选中状态 并且 又点击该 item 时的回调

效果图

4. 更多个性化定制

mNavMenuLayout.setIconRes(iconRes)//设置未选中图标
              .setIconResSelected(iconResSelected)//设置选中图标
              .setTextRes(textRes)//设置文字
              .setIconSize(60, 60)//设置图标大小
              .setIconSize(0, 70,70)
              .setTextSize(20)//设置文字大小
              .setTextSize(0, 20)
              .setTextColor(Color.GRAY)//未选中状态下文字颜色
              .setTextColorSelected(Color.RED)//选中状态下文字颜色
              .setBackColor(Color.WHITE)//设置背景色
              .setBackColor(2,Color.RED)
              .setMarginTop(PixelUtil.dpToPx(MainActivity.this, 5))//文字和图标直接的距离,默认为5dp
              .setMarginTop(1, PixelUtil.dpToPx(MainActivity.this, 10))
              .setSelected(0);//设置选中的位置
            

注:

以设置图标大小为例,有两个重载方法,
.setIconSize(60, 60) 表示将图标宽高设为 60 * 60,此效果针对于底部所有的item,即底部所有图标大小都会是 60 * 60
.setIconSize(0, 70,70) 第一个参数代表位置,表示针对将底部哪一个item的图标进行设置

报错处理

假如在使用过程中出现了无法显示或者是显示效果不正确等问题,请查看Log,里面会有报错提示。

例如: 如果没有在xml中声明  app:menuCount="" 属性 或者是 属性的值 小于1 ,就会在LogCat中看到这样的提示:

  03-18 22:37:58.405 2518-2518/? E/NavMenuLayout: the menuCount mast greater than 0
  03-18 22:37:58.405 2518-2518/? E/NavMenuLayout: the iconRes length is not equals count
  03-18 22:37:58.405 2518-2518/? E/NavMenuLayout: the iconResSelected length is not equals count
  03-18 22:37:58.405 2518-2518/? E/NavMenuLayout: the textRes length is not equals count
 

联系方式

 如果在使用过程中有什么问题或者是意见,请联系我。谢谢大家!
 
 qq: 2670469507
 邮箱:smashing_chen@163.com