Android导航栏

目前底部导航栏目前基本上每个App必备的。一般被放到首页的,作为用来显示App整个内容的框架。

1.BottomNavigationBar+ViewPager+Fragment 的实现。

Activity 代码:

public class MainActivity extends AppCompatActivity implements BottomNavigationBar.OnTabSelectedListener, ViewPager.OnPageChangeListener {

    private ViewPager mViewPager;
    private BottomNavigationBar mBottomNavigationBar;
    private TextBadgeItem mTextBadgeItem; //添加角标
    private List<Fragment> mList; //ViewPager的数据源

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_example_3);

        initBottomNavigationBar();
        initViewPager();

    }

    //初始化ViewPager
    private void initViewPager() {
        mList = new ArrayList<>();
        mList.add(BlankFragment.newInstance("首页"));
        mList.add(BlankFragment.newInstance("音乐"));
        mList.add(BlankFragment.newInstance("电影"));
        mList.add(BlankFragment.newInstance("邮箱"));

        mViewPager = findViewById(R.id.viewPager);
        mViewPager.addOnPageChangeListener(this);
        FragmentAdapter fragmentAdapter = new FragmentAdapter(getSupportFragmentManager(), mList);
        mViewPager.setAdapter(fragmentAdapter); //视图加载适配器
    }

    //初始化底部导航条
    private void initBottomNavigationBar() {
        mBottomNavigationBar = (BottomNavigationBar) findViewById(R.id.bottom_navigation_bar);
        mBottomNavigationBar.setTabSelectedListener(this);
        mTextBadgeItem = new TextBadgeItem()
                .setHideOnSelect(true) //设置被选中时隐藏角标
                .setBackgroundColor(Color.RED)
                .setText("49");
        /**
         * 设置模式
         * 1、BottomNavigationBar.MODE_DEFAULT 默认 
         * 如果Item的个数<=3就会使用MODE_FIXED模式,否则使用MODE_SHIFTING模式
         *
         * 2、BottomNavigationBar.MODE_FIXED 固定大小
         * 填充模式,未选中的Item会显示文字,没有换挡动画。
         *
         * 3、BottomNavigationBar.MODE_SHIFTING 不固定大小
         * 换挡模式,未选中的Item不会显示文字,选中的会显示文字。在切换的时候会有一个像换挡的动画
         */
        mBottomNavigationBar.setMode(BottomNavigationBar.MODE_FIXED);
        /**
         * 设置背景的样式
         * 1、BottomNavigationBar.BACKGROUND_STYLE_DEFAULT 默认
         * 如果设置的Mode为MODE_FIXED,将使用BACKGROUND_STYLE_STATIC 。
         * 如果Mode为MODE_SHIFTING将使用BACKGROUND_STYLE_RIPPLE。
         *
         * 2、BottomNavigationBar.BACKGROUND_STYLE_STATIC 导航条的背景色是白色,
         * 加上setBarBackgroundColor()可以设置成你所需要的任何背景颜色
         * 点击的时候没有水波纹效果
         *
         * 3、BottomNavigationBar.BACKGROUND_STYLE_RIPPLE 导航条的背景色是你设置的处于选中状态的
         * Item的颜色(ActiveColor),也就是setActiveColorResource这个设置的颜色
         * 点击的时候有水波纹效果
         */
        mBottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC);
        //设置导航条背景颜色
        //在BACKGROUND_STYLE_STATIC下,表示整个容器的背景色。
        // 而在BACKGROUND_STYLE_RIPPLE下,表示选中Item的图标和文本颜色。默认 Color.WHITE
        mBottomNavigationBar.setBarBackgroundColor(R.color.colorPrimaryDark);
        //选中时的颜色,在BACKGROUND_STYLE_STATIC下,表示选中Item的图标和文本颜色。
        // 而在BACKGROUND_STYLE_RIPPLE下,表示整个容器的背景色。默认Theme's Primary Color
        //mBottomNavigationBar.setActiveColor(R.color.black);
        //未选中时的颜色,表示未选中Item中的图标和文本颜色。默认为 Color.LTGRAY 
        //mBottomNavigationBar.setInActiveColor("#FFFFFF");


        mBottomNavigationBar.addItem(new BottomNavigationItem(R.drawable.ic_home_black_24dp, "首页")
                .setActiveColorResource(R.color.white))
                .addItem(new BottomNavigationItem(R.drawable.ic_audiotrack_black_24dp, "音乐")
                        .setActiveColorResource(R.color.white))
                .addItem(new BottomNavigationItem(R.drawable.ic_desktop_mac_black_24dp, "电影")
                        .setActiveColorResource(R.color.white).setBadgeItem(mTextBadgeItem))
                .addItem(new BottomNavigationItem(R.drawable.ic_mail_outline_black_24dp, "邮件")
                        .setActiveColorResource(R.color.white))
                .setFirstSelectedPosition(0)
                .initialise(); //所有的设置需在调用该方法前完成

        //如果使用颜色的变化不足以展示一个选项Item的选中与非选中状态,
        // 可以使用BottomNavigationItem.setInActiveIcon()方法来设置。
//        new BottomNavigationItem(R.drawable.ic_home_black_24dp, "首页")//这里表示选中的图片
//                .setInactiveIcon(ContextCompat.getDrawable(this,R.mipmap.ic_launcher));//非选中的图片
    }

    @Override
    public void onTabSelected(int position) {
        //tab被选中
        mViewPager.setCurrentItem(position);
    }

    @Override
    public void onTabUnselected(int position) {

    }

    @Override
    public void onTabReselected(int position) {

    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {
        //ViewPager滑动
        mBottomNavigationBar.selectTab(position);
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
}

Fragment 代码:

public class BlankFragment extends Fragment {


    public BlankFragment() {
        // Required empty public constructor
        Log.e("BlankFragment", "constructor");
    }

    public static BlankFragment newInstance(String s) {
        Bundle args = new Bundle();
        args.putString("BlankFragment", s);
        BlankFragment fragment = new BlankFragment();
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_blank, container, false);
        TextView textView = view.findViewById(R.id.tv);
        Bundle bundle = getArguments();
        String args = bundle.getString("BlankFragment");
        textView.setText(args);
        Log.e("BlankFragment", "onCreateView");
        return view;
    }

}

FragmentAdapter 代码:

public class FragmentAdapter extends FragmentPagerAdapter {
    private List<Fragment> mFragmentList;

    public FragmentAdapter(FragmentManager fm, List<Fragment> mFragmentList) {
        super(fm);
        this.mFragmentList = mFragmentList;
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }
}

2.BottomNavigationBar+Fragment 的实现。

Activity代码:

public class MainActivity extends AppCompatActivity implements BottomNavigationBar.OnTabSelectedListener {

    private BottomNavigationBar mBottomNavigationBar;
    private BlankFragment mBlankFragment1, mBlankFragment2, mBlankFragment3, mBlankFragment4;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_example_4);
        mBottomNavigationBar = findViewById(R.id.bottom_navigation_bar);

        //小图标
        ShapeBadgeItem shapeBadgeItem = new ShapeBadgeItem()
                .setShapeColorResource(R.color.colorPrimary)
                .setGravity(Gravity.TOP | Gravity.END)
                .setHideOnSelect(false);
        //消息小图标
        TextBadgeItem textBadgeItem = new TextBadgeItem()
                .setBorderWidth(4)
                .setBackgroundColorResource(R.color.colorAccent)
                .setAnimationDuration(200)
                .setText("6")
                .setHideOnSelect(false);

        mBottomNavigationBar.setMode(BottomNavigationBar.MODE_FIXED);
//        mBottomNavigationBar.setMode(BottomNavigationBar.MODE_SHIFTING);
        mBottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC);
//        mBottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_RIPPLE);
        mBottomNavigationBar.setBarBackgroundColor(android.R.color.holo_blue_light);//set background color for navigation bar
        //选中颜色 图标和文字 setActiveColorResource会覆盖setActiveColor设置的效果
        mBottomNavigationBar.setActiveColor(R.color.colorAccent);//选中颜色 图标和文字
        mBottomNavigationBar.setInActiveColor(android.R.color.white);//unSelected icon color

        //设置图片与文字item1
        BottomNavigationItem bottomNavigationItem1 = new BottomNavigationItem(R.drawable.ic_add_shopping_cart_black_24dp, "Shop");
//        bottomNavigationItem1.setInactiveIcon(ContextCompat.getDrawable(this, R.mipmap.ic_launcher));
        bottomNavigationItem1.setBadgeItem(shapeBadgeItem);
        //设置图片与文字item2
        BottomNavigationItem bottomNavigationItem2 = new BottomNavigationItem(R.drawable.ic_directions_bike_black_24dp, "Riding");
//        bottomNavigationItem2.setInactiveIcon(ContextCompat.getDrawable(this, R.mipmap.ic_launcher));
        bottomNavigationItem2.setBadgeItem(textBadgeItem);
        //设置图片与文字item3
        BottomNavigationItem bottomNavigationItem3 = new BottomNavigationItem(R.drawable.ic_filter_vintage_black_24dp, "Flower");
//        bottomNavigationItem3.setInactiveIcon(ContextCompat.getDrawable(this, R.mipmap.ic_launcher));
        bottomNavigationItem3.setBadgeItem(textBadgeItem);
        //设置图片与文字item4
        BottomNavigationItem bottomNavigationItem4 = new BottomNavigationItem(R.drawable.ic_notifications_black_24dp, "Notice");
//        bottomNavigationItem4.setInactiveIcon(ContextCompat.getDrawable(this, R.mipmap.ic_launcher));
        bottomNavigationItem4.setBadgeItem(textBadgeItem);
        //添加item
        mBottomNavigationBar.addItem(bottomNavigationItem1);
        mBottomNavigationBar.addItem(bottomNavigationItem2);
        mBottomNavigationBar.addItem(bottomNavigationItem3);
        mBottomNavigationBar.addItem(bottomNavigationItem4);
        //设置默认选中按钮
        mBottomNavigationBar.setFirstSelectedPosition(0);
        //所有的设置需在调用该方法前完成
        mBottomNavigationBar.initialise();
//        mBottomNavigationBar
//                .addItem(new BottomNavigationItem(R.drawable.icon_one, R.string.tab_one)/*.setActiveColorResource(R.color.green)*/.setBadgeItem(textBadgeItem))
//                .addItem(new BottomNavigationItem(R.drawable.icon_two, R.string.tab_two)/*.setActiveColorResource(R.color.orange)*/)
//                .addItem(new BottomNavigationItem(R.drawable.icon_three, R.string.tab_three)/*.setActiveColorResource(R.color.lime)*/)
//                .addItem(new BottomNavigationItem(R.drawable.icon_four, R.string.tab_four))
//                .setFirstSelectedPosition(0)
//                .initialise();

        mBottomNavigationBar.setTabSelectedListener(this);
        setDefaultFragment();

    }

    private void setDefaultFragment() {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        mBlankFragment1 = BlankFragment.newInstance("First Fragment");
        mBlankFragment2 = BlankFragment.newInstance("Second Fragment");
        mBlankFragment3 = BlankFragment.newInstance("Third Fragment");
        mBlankFragment4 = BlankFragment.newInstance("Forth Fragment");
        transaction.replace(R.id.frame_layout_content, mBlankFragment1).commit();
    }

    @Override
    public void onTabSelected(int position) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        switch (position) {
            case 0:
                if (mBlankFragment1 == null) {
                    mBlankFragment1 = BlankFragment.newInstance("First Fragment");
                }
                transaction.replace(R.id.frame_layout_content, mBlankFragment1);
                break;
            case 1:
                if (mBlankFragment2 == null) {
                    mBlankFragment2 = BlankFragment.newInstance("Second Fragment");
                }
                transaction.replace(R.id.frame_layout_content, mBlankFragment2);
                break;
            case 2:
                if (mBlankFragment3 == null) {
                    mBlankFragment3 = BlankFragment.newInstance("Third Fragment");
                }
                transaction.replace(R.id.frame_layout_content, mBlankFragment3);
                break;
            case 3:
                if (mBlankFragment4 == null) {
                    mBlankFragment4 = BlankFragment.newInstance("Forth Fragment");
                }
                transaction.replace(R.id.frame_layout_content, mBlankFragment4);
                break;
        }
        transaction.commit();
    }

    @Override
    public void onTabUnselected(int position) {

    }

    @Override
    public void onTabReselected(int position) {

    }
}

Fragment代码同上。

3.BottomNavigationView+Fragment 的实现。

Activity代码:

public class MainActivity extends AppCompatActivity implements BottomNavigationView.OnNavigationItemSelectedListener {

    private BottomNavigationView mBottomNavigationView, mBottomNavigationView1;
    private BlankFragment mBlankFragment1, mBlankFragment2, mBlankFragment3;
    private FragmentManagerHelper mFragmentManagerHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_example_2);

        mFragmentManagerHelper = new FragmentManagerHelper(getSupportFragmentManager(), R.id.frame_layout_content);

        mBottomNavigationView = findViewById(R.id.nav_view);
        //设置初始选中项
//        BottomNavigationUtils.setItem(mBottomNavigationView, 0);
        //设置是否开启平移动画及文字显示方式
        BottomNavigationUtils.openAnimation(mBottomNavigationView, false, LABEL_VISIBILITY_AUTO);
        mBottomNavigationView.setOnNavigationItemSelectedListener(this);
        setDefaultFragment();

        //使用代码添加 MenuItem
        addItem();

    }

    private void addItem() {
        mBottomNavigationView1 = findViewById(R.id.nav_view1);
        Menu menu = mBottomNavigationView1.getMenu();
        //均衡分布
        menu.setQwertyMode(true);
        menu.add(0, 0, 0, "测试零");
        menu.add(0, 1, 1, "测试一");
        menu.add(0, 2, 2, "测试二");
        for (int i = 0; i < 3; i++) {
            MenuItem item = menu.findItem(i);
            item.setIcon(R.drawable.ic_home_black_24dp);
        }

    }

    private void setDefaultFragment() {
//        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        mBlankFragment1 = BlankFragment.newInstance("First Fragment");
        mBlankFragment2 = BlankFragment.newInstance("Second Fragment");
        mBlankFragment3 = BlankFragment.newInstance("Third Fragment");
//        transaction.replace(R.id.frame_layout_content, mBlankFragment1).commit();
        mFragmentManagerHelper.add(mBlankFragment1);
    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
//        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        int itemId = item.getItemId();
        switch (itemId) {
            case R.id.navigation_home:
                if (mBlankFragment1 == null) {
                    mBlankFragment1 = BlankFragment.newInstance("First Fragment");
                }
//                transaction.replace(R.id.frame_layout_content, mBlankFragment1);
                mFragmentManagerHelper.switchFragment(mBlankFragment1);
                break;
            case R.id.navigation_dashboard:
                if (mBlankFragment2 == null) {
                    mBlankFragment2 = BlankFragment.newInstance("Second Fragment");
                }
//                transaction.replace(R.id.frame_layout_content, mBlankFragment2);
                mFragmentManagerHelper.switchFragment(mBlankFragment2);
                break;
            case R.id.navigation_notifications:
                if (mBlankFragment3 == null) {
                    mBlankFragment3 = BlankFragment.newInstance("Third Fragment");
                }
//                transaction.replace(R.id.frame_layout_content, mBlankFragment3);
                mFragmentManagerHelper.switchFragment(mBlankFragment3);
                break;
        }
//        transaction.commit();
        return true;
    }
}

Fragment代码同上。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章