private TabLayout mTabLayout;
private ViewPager mViewPager;
private PagerAdapter mPagerAdapter;
private String[] titles = {"推薦","分類","排行","管理","我的"};
private List<Fragment> fragments;
定義一個(gè)儲(chǔ)存title的數(shù)組和fragment的集合,初始化相關(guān)控件。
private void initView() {
mTabLayout = findViewById(R.id.TabLayout);
mViewPager = findViewById(R.id.ViewPager);
initViewPagerFragment();
}
private void initViewPagerFragment() {
mPagerAdapter = new PagerAdapter(getSupportFragmentManager());
fragments = new ArrayList<>();
for (int i = 0; i < titles.length; i++) {
fragments.add(FragmentFactory.creatFragment(i));
}
mPagerAdapter.setTitles(titles);
mPagerAdapter.setFragments(fragments);
mViewPager.setAdapter(mPagerAdapter);
//將TabLayout和ViewPager綁定
mTabLayout.setupWithViewPager(mViewPager);
mTabLayout.setTabMode(TabLayout.MODE_FIXED);
//mTabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
}
將fragment添加到集合中锅知,我這里用的是一個(gè)工廠類播急,一會(huì)下方會(huì)貼代碼,也可以一個(gè)一個(gè)new出來售睹。代碼中最后是設(shè)置TabLayout的模式桩警,現(xiàn)在寫的是將文字壓縮到一整條中,注釋的模式為可滾動(dòng)式的昌妹。
public class FragmentFactory {
/**
* 推薦
*/
public static final int TAB_RECOMMEND = 0;
/**
* 分類
*/
public static final int TAB_CATEGORY = 1;
/**
* 排行
*/
public static final int TAB_TOP = 2;
/**
* 管理
*/
public static final int TAB_APPMANAGER = 3;
/**
* 我的
*/
public static final int TAB_MY = 4;
private static Map<Integer,BaseFragment> mFragmentMap = new HashMap<>();
public static BaseFragment creatFragment(int index){
BaseFragment fragment = mFragmentMap.get(index);
//如果之前沒有創(chuàng)建捶枢,就創(chuàng)建新的
if (fragment == null){
switch (index){
case TAB_RECOMMEND:
fragment = new RecommendFragment();
break;
case TAB_CATEGORY:
fragment = new CategoryFragment();
break;
case TAB_TOP:
fragment = new TopFragment();
break;
case TAB_APPMANAGER:
fragment = new AppManagerFragment();
break;
case TAB_MY:
fragment = new MyFragment();
break;
}
//把創(chuàng)建的fragment存起來
mFragmentMap.put(index,fragment);
}
return fragment;
}
}
下面是Activity的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="cy.net.appstore.Activity.MainActivity">
<android.support.design.widget.TabLayout
android:id="@+id/TabLayout"
android:layout_width="match_parent"
style="@style/MyTablayoutstyle"
android:layout_height="40dp"/>
<android.support.v4.view.ViewPager
android:id="@+id/ViewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
給Tablayout自定義一個(gè)style
<style name="MyTablayoutstyle" parent="Base.Widget.Design.TabLayout">
<item name="tabBackground">@color/white</item> //背景顏色
<item name="tabIndicatorColor">@color/blue</item> //指示線的顏色
<item name="tabIndicatorHeight">2dp</item> //指示線的高度
<item name="tabSelectedTextColor">@color/blue</item> //文字選中顏色
<item name="android:textSize">15sp</item>
<item name="android:textColor">@color/text</item>
</style>
適配器代碼:
public class PagerAdapter extends FragmentStatePagerAdapter {
private String[] titles;
private List<Fragment> fragments = null;
public void setTitles(String[] titles) {
this.titles = titles;
}
public void setFragments(List<Fragment> fragments) {
this.fragments = fragments;
}
public PagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
return super.instantiateItem(container, position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
super.destroyItem(container, position, object);
}
@Override
public CharSequence getPageTitle(int position) {
return titles[position];
}
}
一個(gè)最基本的TabLayout和Fragment聯(lián)動(dòng)效果就做好了。
看到網(wǎng)上有篇文章講的挺全飞崖,鏈接:奔跑吧李博