Android底部导航栏之BottomNavigationBar

作者: NickelFox | 来源:发表于2017-04-04 21:41 被阅读1773次

一. BottomNavgationBar简介

  • 鉴于官方BottomNavigationView还不是很完善,在此就先使用大佬们做的第三方库
  • 本文讲的是Ashok-VarmaBottomNavigation
  • 先看效果:
Default默认效果
  • FIXED+STATIC


    FIXED+STATIC
  • FIXED+RIPPLE


    FIXED+RIPPLE
  • SHIFTING+RIPPLE


    SHIFTING+RIPPLE
  • 2.3使用步骤

    • 在build.gradle里面添加
    compile 'com.ashokvarma.android:bottom-navigation-bar:1.4.1'//版本号可能会更新,以具体更新为准
    
    • xml中使用控件
    <com.ashokvarma.bottomnavigation.BottomNavigationBar
            android:id="@+id/bottom_nav_bar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/colorPrimary">
    </com.ashokvarma.bottomnavigation.BottomNavigationBar>
    
    • 样式配置
    /*1.首先进行fvb*/
    bottomNavigationBar = (BottomNavigationBar) findViewById(R.id.bottom_nav_bar);
    /*2.进行必要的设置*/
    bottomNavigationBar.setBarBackgroundColor(R.color.colorPrimary);
    bottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_RIPPLE);
    bottomNavigationBar.setMode(BottomNavigationBar.MODE_SHIFTING);//适应大小
    /*3.添加Tab*/
    bottomNavigationBar.addItem(new BottomNavigationItem(
            R.drawable.listen_fill,R.string.bottom_nav_home)
            .setInactiveIconResource(R.drawable.listen)
            .setActiveColorResource(R.color.colorPrimary))
            .addItem(new BottomNavigationItem(
                    R.drawable.speech_fill,R.string.bottom_nav_like)
                    .setInactiveIconResource(R.drawable.speech)
                    .setActiveColorResource(R.color.colorPrimaryDark))
                    .addItem(new BottomNavigationItem(
                     R.drawable.social_fill,R.string.bottom_nav_location)
                    .setInactiveIconResource(R.drawable.social)
                    .setActiveColorResource(R.color.yellow))
                    .addItem(new BottomNavigationItem(
                     R.drawable.profile_fill,R.string.bottom_nav_person)
                    .setInactiveIconResource(R.drawable.profile)
                    .setActiveColorResource(R.color.colorAccent))
                    .setFirstSelectedPosition(0)//默认显示面板
                    .initialise();//初始化
    
    • PS:当Background为BACKGROUND_STYLE_RIPPLE的时候,背景颜色设置会无效,这时背景颜色会体现在setActiveColor()的设置上面*
    • 监听器配置
    • 实现BottomNavigationBar.OnTabSelectedListener接口
    • 重载方法
        /*Tab被选中(position为当前被选中的Tab)*/
       @Override
        public void onTabSelected(int position) {
    
        }
        /*Tab被取消选中(position为当前被选中的Tab)*/
        @Override
        public void onTabUnselected(int position) {
    
        }
        /*Tab被重新选中(position为当前被选中的Tab)*/
        @Override
        public void onTabReselected(int position) {
    
        }
    
    • 重载方法里实现需要的逻辑(一般就是开启transaction进行fragment的切换)

    三. 源码

    • xml
    <?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="cn.foxnickel.bottomnavdemo.MainActivity">
        <include layout="@layout/content_main"/>
        <com.ashokvarma.bottomnavigation.BottomNavigationBar
            android:id="@+id/bottom_nav_bar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:background="@color/colorPrimary">
        </com.ashokvarma.bottomnavigation.BottomNavigationBar>
    </RelativeLayout>
    
    • MainActivity
    package cn.foxnickel.bottomnavdemo;
    import android.os.Bundle;
    import android.support.v4.app.FragmentTransaction;
    import android.support.v7.app.AppCompatActivity;
    import com.ashokvarma.bottomnavigation.BottomNavigationBar;
    import com.ashokvarma.bottomnavigation.BottomNavigationItem;
    import cn.foxnickel.bottomnavdemo.fragment.ListenFragmet;
    import cn.foxnickel.bottomnavdemo.fragment.ProfileFragmet;
    import cn.foxnickel.bottomnavdemo.fragment.SocialFragmet;
    import cn.foxnickel.bottomnavdemo.fragment.SpeechFragmet;
    public class MainActivity extends AppCompatActivity implements BottomNavigationBar.OnTabSelectedListener{
        private BottomNavigationBar bottomNavigationBar;
        private ListenFragmet listenFragmet;
        private SpeechFragmet speechFragmet;
        private SocialFragmet socialFragmet;
        private ProfileFragmet profileFragmet;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initBottomNavBar();
            initTab();
            bottomNavigationBar.setTabSelectedListener(this);
        }
    
        private void initBottomNavBar(){
            /*1.首先进行fvb*/
            bottomNavigationBar = (BottomNavigationBar) findViewById(R.id.bottom_nav_bar);
            /*2.进行必要的设置*/
            bottomNavigationBar.setBarBackgroundColor(R.color.colorPrimary);
            bottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_RIPPLE);
            bottomNavigationBar.setMode(BottomNavigationBar.MODE_SHIFTING);//适应大小
            /*3.添加Tab*/
            bottomNavigationBar.addItem(new BottomNavigationItem(
                    R.drawable.listen_fill,R.string.bottom_nav_home)
                    .setInactiveIconResource(R.drawable.listen)
                    .setActiveColorResource(R.color.colorPrimary))
                    .addItem(new BottomNavigationItem(
                            R.drawable.speech_fill,R.string.bottom_nav_like)
                            .setInactiveIconResource(R.drawable.speech)
                            .setActiveColorResource(R.color.colorPrimaryDark))
                    .addItem(new BottomNavigationItem(
                            R.drawable.social_fill,R.string.bottom_nav_location)
                            .setInactiveIconResource(R.drawable.social)
                            .setActiveColorResource(R.color.yellow))
                    .addItem(new BottomNavigationItem(
                            R.drawable.profile_fill,R.string.bottom_nav_person)
                            .setInactiveIconResource(R.drawable.profile)
                            .setActiveColorResource(R.color.colorAccent))
                    .setFirstSelectedPosition(0)//默认显示面板
                    .initialise();//初始化
        }
    
        private void initTab(){
            listenFragmet = new ListenFragmet();
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            transaction.replace(R.id.content_main,listenFragmet);
            transaction.commit();
        }
    
        @Override
        public void onTabSelected(int position) {
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            switch (position){
                case 0:
                    if(listenFragmet == null){
                        listenFragmet = new ListenFragmet();
                    }
                    transaction.replace(R.id.content_main,listenFragmet);
                    break;
                case 1:
                    if(speechFragmet == null){
                        speechFragmet = new SpeechFragmet();
                    }                transaction.replace(R.id.content_main,speechFragmet);
                    break;
                case 2:
                    if(socialFragmet == null){
                        socialFragmet = new SocialFragmet();
                    }
                    transaction.replace(R.id.content_main,socialFragmet);
                    break;
                case 3:
                    if(profileFragmet == null){
                        profileFragmet = new ProfileFragmet();
                    }
                    transaction.replace(R.id.content_main,profileFragmet);
                    break;
            }
            transaction.commit();
        }
    
        @Override
        public void onTabUnselected(int position) {
    
        }
    
        @Override
        public void onTabReselected(int position) {
    
        }
    }
    

    相关文章

    网友评论

      本文标题:Android底部导航栏之BottomNavigationBar

      本文链接:https://www.haomeiwen.com/subject/nnvzottx.html