一个可扩展性高的Tablayout(CommonTabLayout的使用方法)

如果你做的是底部导航栏可以用这个,要是做顶部的分类,建议用SlidingTabLayout更合适

git地址:https://github.com/H07000223/FlycoTabLayout

三种TabLayout的详细讲解:https://juejin.im/entry/58f70734a0bb9f006ab653b6

1.首先把需要显示的一些东西全部放进相应的集合中(包括选中图片,未选中图片,标题,fragment等)

2.创建一个

List list3=new ArrayList<>()集合,用来放整体数据
3.
随便遍历一个集合进行添加(因为所有集合的长度相同)
for (int i = 0; i < list2.size(); i++) {
    final int finalI = i;
    list3.add(new CustomTabEntity() {
        @Override
        public String getTabTitle() {
            return list2.get(finalI); //这个是标题的集合
        }

        @Override
        public int getTabSelectedIcon() {
            return 0;                //这个是选中图片的集合

        }

        @Override
        public int getTabUnselectedIcon() {
            return 0;              //这个是未选中图片的集合
        }
    });
}
4.获取控件
layout = inflate.findViewById(R.id.layout);   //CommonTabLayout
final ViewPager vp3 = inflate.findViewById(R.id.vp3);//viewpager
5.给viewpager设置适配器

6.把那些关联数据交给layout

 

layout.setTabData((ArrayList) list3);

7.layout的变化监听

 

layout.setOnTabSelectListener(new OnTabSelectListener() {
    @Override
    public void onTabSelect(int position) {
        vp3.setCurrentItem(position);  //显示相应的页面
    }

    @Override
    public void onTabReselect(int position) {

    }
});
 
vp3.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {

        layout.setCurrentTab(position);    //对应相应的图标与变色
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
});
vp3.setCurrentItem(0);
以上都不可少,他们互相关联
就是这么多,就可以实现了,具体的属性大家自己查阅即可,有很多。

顺便提一下,当你设置选中为色块的时候,只需要给指示器设置宽度即可,它会自动居中,设置了高度就不行了

你可能感兴趣的:(一个可扩展性高的Tablayout(CommonTabLayout的使用方法))