JYTabLayout

使用TabLayout实现类似网易选项卡的动态滑动效果

先上UI图(无图说个XX啊)

AndroidUI

JYTabLayout-3

配置build.gradle:

dependencies {
    ...
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support:design:25.3.1'
    compile 'com.android.support:recyclerview-v7:25.3.1'
    compile 'com.android.support:cardview-v7:25.3.1'
}

此Demo中需使用RecyclerView和CardView,所有这里引用com.android.support:recyclerview和com.android.support:cardview。

主要说一下主界面的布局如何搭建的,先上布局代码:





    


        


        

        

    

    

    



此布局用到了AppBarLayout 和 Toolbar,而AppBarLayout是Android Design Support Library 新加入的控件,继承自LinearLayout。

此处用AppBarLayout是将Toolbar和TabLayout组合起来作为一个整体。

此布局中最关键的一点主要是:android.support.design.widget.TabLayout 标签中的 app:tabMode="scrollable" ,意思是设置Tab的模式为"可滑动的"。此标签还能设置不可滑动:app:tabMode="fixed"。如果我们的Tab的数量过多的话,如果设置不可滑动,选项就会被彼此压缩。例如:此Demo中设置了13个,如果设置为不可滑动的话,就会出现此情况:

JYTabLayout_第1张图片
JYTabLayout-1

这种情况肯定不是我们想要的那种,所以我们要将标签设置为"可滑动的"。

JYTabLayout_第2张图片
JYTabLayout-2

可以查看两种效果。

好了,布局写好了,接下来要在MainActivity中写我们的主要逻辑代码了。逻辑代码也很简单,此Demo中设定了13个标题并创建了相应的TabLayout和Fragment,然后设置ViewPager适配器和TabLayout适配器,将TabLayout和ViewPager联动起来。

 private void initViewPager() {
        List titles = new ArrayList<>();

        for (int i = 0 ; i < mStrings.length ; i ++) {
            titles.add(mStrings[i]);
        }


        List fragments = new ArrayList<>();
        for (int i = 0 ; i < mStrings.length ; i ++) {
            fragments.add(new ListFragment());
        }


        FragmentAdapter fragmentAdapter = new FragmentAdapter(getSupportFragmentManager(), titles, fragments);

        //给ViewPager设置适配器
        mViewPager.setAdapter(fragmentAdapter);
        //将TabLayout和ViewPager关联起来。
        mTabLayout.setupWithViewPager(mViewPager);
        //给TabLayout设置适配器
        mTabLayout.setTabsFromPagerAdapter(fragmentAdapter);
    }

此处自创建一ListFragment作为每个Tab的界面。

@Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        mRecyclerView = (RecyclerView) inflater.inflate(R.layout.list_fragment, container, false);
        return mRecyclerView;

    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(mRecyclerView.getContext()));
        mRecyclerView.setAdapter(new RecyclerViewAdapter(getActivity()));
    }

Fragment引入的布局中就一个RecyclerView,关于RecyclerView的创建、点击事件此处就不再说了。

你可能感兴趣的:(JYTabLayout)