zoukankan      html  css  js  c++  java
  • 底部导航栏使用BottomNavigationBar

    1.github地址

    https://github.com/zhouxu88/BottomNavigationBar

    2.基本使用

    2,1添加依赖

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

      

    2.2布局中使用

     <com.ashokvarma.bottomnavigation.BottomNavigationBar
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/bottom_nav_bar"
            android:layout_alignParentBottom="true"
            ></com.ashokvarma.bottomnavigation.BottomNavigationBar>
    

      

    2.3代码中设置

            /**
             * 导航基础设置 包括按钮选中效果 导航栏背景色等
             */
            bottomNavigationBar.setTabSelectedListener(this)
                    .setMode(BottomNavigationBar.MODE_FIXED)
                    .setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC)
                    .setActiveColor("#ffffff")//选中颜色
                    .setInActiveColor("#2B2B2B")//未选中颜色
                    .setBarBackgroundColor("#EDC18E");//导航栏背景色
            badgeItem = new TextBadgeItem()
                    .setBorderWidth(2)
                    .setTextColor(Color.BLACK)
                    .setBackgroundColor(Color.RED)
                    .setText("99");
    
             /**
             *添加导航按钮
             */
            bottomNavigationBar.addItem(new BottomNavigationItem(R.mipmap.home,"首页"))
                    .addItem(new BottomNavigationItem(R.mipmap.setting,"设置"))
                    .addItem(new BottomNavigationItem(R.mipmap.menu,"菜单").setInActiveColor("#ffff00"))
                    .addItem(new BottomNavigationItem(R.mipmap.person,"个人").setBadgeItem(badgeItem))//添加小红点数据
                    .initialise();//initialise 一定要放在 所有设置的最后一项
    

      

    2.4添加监听

    bottomNavigationBar.setTabSelectedListener(new BottomNavigationBar.OnTabSelectedListener() {//这里也可以使用SimpleOnTabSelectedListener
             @Override
             public void onTabSelected(int position) {//未选中 -> 选中
             }
    
             @Override
             public void onTabUnselected(int position) {//选中 -> 未选中
             }
    
             @Override
             public void onTabReselected(int position) {//选中 -> 选中
             }
         });
    

      

    3.知识点,用法说明。

    3.1设置导航栏模式:setMode()

    setMode() 内的参数有三种模式类型:
         MODE_DEFAULT 自动模式:导航栏Item的个数<=3 用 MODE_FIXED 模式,否则用 MODE_SHIFTING 模式
         MODE_FIXED 固定模式:未选中的Item显示文字,无切换动画效果。
         MODE_SHIFTING 切换模式:未选中的Item不显示文字,选中的显示文字,有切换动画效果。
    

      

    3.2设置导航栏背景模式:setBackgroundStyle()

    setBackgroundStyle() 内的参数有三种样式
       BACKGROUND_STYLE_DEFAULT: 默认样式 如果设置的Mode为MODE_FIXED,将使用BACKGROUND_STYLE_STATIC,如果Mode为MODE_SHIFTING将使用BACKGROUND_STYLE_RIPPLE。
       BACKGROUND_STYLE_STATIC: 静态样式 点击无波纹效果,航条的背景色是白色,加上setBarBackgroundColor()可以设置成你所需要的任何背景颜色
       BACKGROUND_STYLE_RIPPLE: 波纹样式 点击有波纹效果,导航条的背景色是你设置的处于选中状态的 Item的颜色(ActiveColor),也就是setActiveColorResource这个设置的颜色
    

      

    3.3设置默认颜色

    bottomNavigationBar
                  .setActiveColor("#ff0000") //设置选中的颜色
                  .setInActiveColor("#FFFFFF")//设置选中的颜色
                  .setBarBackgroundColor("#000000");//设置bar背景
    in-active color:
    表示未选中Item中的图标和文本颜色。默认为 Color.LTGRAY
    
    active color :
    在BACKGROUND_STYLE_STATIC下,表示选中Item的图标和文本颜色。而在BACKGROUND_STYLE_RIPPLE下,表示整个容器的背景色。默认Theme's Primary Color
    
    background color :
    在BACKGROUND_STYLE_STATIC下,表示整个容器的背景色。而在BACKGROUND_STYLE_RIPPLE下,表示选中Item的图标和文本颜色。默认 Color.WHITE
    

      

    3.4定制Item的选中未选中颜色

    //设置Item未选中颜色方法
    new BottomNavigationItem().setInActiveColorResource(R.color.white)) 或者
    new BottomNavigationItem().setInActiveColor() 
    //设置Item选中颜色方法
    new BottomNavigationItem().setActiveColorResource()或者
    new BottomNavigationItem().setActiveColor()
    

      

    3.5Icon的定制

    如果使用颜色的变化不足以展示一个选项Item的选中与非选中状态,可以使用BottomNavigationItem.setInActiveIcon()方法来设置。

     .addItem(new BottomNavigationItem(R.mipmap.menu,"菜单").setInActiveColor("#ffff00"))

    3.6手动隐藏与显示

    bottomNavigationBar.hide();//隐藏
    bottomNavigationBar.hide(true);//隐藏是否启动动画,这里并不能自定义动画
    bottomNavigationBar.unHide();//显示
    bottomNavigationBar.hide(true);//隐藏是否启动动画,这里并不能自定义动画
    

      

    3.7为Item添加Badge,一般用作消息提醒的

    badgeItem = 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("99");

    shapeBadgeItem=new ShapeBadgeItem()
    .setShape(SHAPE_OVAL) //形状
    .setShapeColor(Color.BLUE) //颜色
    .setShapeColorResource(R.color.colorPrimaryDark) //颜色,资源文件获取
    .setEdgeMarginInDp(this,0) //距离Item的margin,dp
    .setEdgeMarginInPixels(20) //距离Item的margin,px
    .setSizeInDp(this,10,10) //宽高,dp
    .setSizeInPixels(5,5) //宽高,px
    .setAnimationDuration(200) //隐藏和展示的动画速度,单位毫秒,和setHideOnSelect一起使用
    .setGravity(Gravity.LEFT) //位置,默认右上角
    .setHideOnSelect(true); //true:当选中状态时消失,非选中状态显示,moren false

      

    4案例

    public class MainActivity extends AppCompatActivity implements BottomNavigationBar.OnTabSelectedListener {
        private BottomNavigationBar bottomNavigationBar;
        private HomeFragment homeFragment;
        private PersonFragment personFragment;
        private SettingFragment settingFragment;
        private MenuFragment menuFragment;
        private FragmentManager fm;
        private TextBadgeItem badgeItem;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            bottomNavigationBar=findViewById(R.id.bottom_nav_bar);
            fm=getFragmentManager();
            initBottomBar();
    
        }
    
        private void initBottomBar() {
            /**
             * 导航基础设置 包括按钮选中效果 导航栏背景色等
             */
            bottomNavigationBar.setTabSelectedListener(this)
                    .setMode(BottomNavigationBar.MODE_FIXED)
                    .setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC)
                    .setActiveColor("#ffffff")//选中颜色
                    .setInActiveColor("#2B2B2B")//未选中颜色
                    .setBarBackgroundColor("#EDC18E");//导航栏背景色
            badgeItem = 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("99");
    
             /**
             *添加导航按钮
             */
            bottomNavigationBar.addItem(new BottomNavigationItem(R.mipmap.home,"首页"))
                    .addItem(new BottomNavigationItem(R.mipmap.setting,"设置"))
                    .addItem(new BottomNavigationItem(R.mipmap.menu,"菜单").setInActiveColor("#ffff00"))
                    .addItem(new BottomNavigationItem(R.mipmap.person,"个人").setBadgeItem(badgeItem))//添加小红点数据
                    .initialise();//initialise 一定要放在 所有设置的最后一项
    
    
            //设置默认导航栏
            homeFragment=HomeFragment.newInstance("首页");
            fm.beginTransaction().replace(R.id.fl,homeFragment).commit();
    
        }
        /**
         * 设置选中逻辑
         */
        @Override
        public void onTabSelected(int position) {
            FragmentTransaction transaction = fm.beginTransaction();
            switch (position){
                case 0:
                    if(homeFragment==null){
                        homeFragment=new HomeFragment();
                    }
                    transaction.replace(R.id.fl,homeFragment);
                    break;
                case 1:
                    if(settingFragment==null){
                        settingFragment=new SettingFragment();
                    }
                    transaction.replace(R.id.fl,settingFragment);
                    break;
                case 2:
                    if(menuFragment==null){
                        menuFragment=new MenuFragment();
                    }
                    badgeItem.setText("4");
                    transaction.replace(R.id.fl,menuFragment);
                    break;
                case 3:
                    if(personFragment==null){
                        personFragment=new PersonFragment();
                    }
                    transaction.replace(R.id.fl,personFragment);
                    break;
                default:
    
                    break;
            }
            transaction.commit();
        }
    
        /**
         * 设置未选中逻辑
         */
        @Override
        public void onTabUnselected(int position) {
    
        }
    
        /**
         * 设置释放逻辑
         */
        @Override
        public void onTabReselected(int position) {
    
        }
    }
    

      

    参考:

    1.Android底部导航 BottomNavigationBar(Google官方)

    2.BottomNavigationBar使用详解

    3.安卓 BottomNavigationBar 底部导航栏 最简单用法详解

  • 相关阅读:
    UVa532 Dungeon Master 三维迷宫
    6.4.2 走迷宫
    UVA 439 Knight Moves
    UVa784 Maze Exploration
    UVa657 The die is cast
    UVa572 Oil Deposits DFS求连通块
    UVa10562 Undraw the Trees
    UVa839 Not so Mobile
    327
    UVa699 The Falling Leaves
  • 原文地址:https://www.cnblogs.com/wangjiaghe/p/9742921.html
Copyright © 2011-2022 走看看