效果
前言
底部导航栏有多种实现方式,最近学习了ViewPager+TabLayout 的实现。
发现 design 版本的tablayout提供了神奇的封装,只需要调用
setupWithViewPager(viewPager)
就会根据 ViewPager中view数量配置与之相等的tab。
实现
Fragment
我们使用Fragment去填充Viewpager,因此创建了多个Fragment文件。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFBA55"
android:gravity="center"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第一个Page"
android:textColor="#000000"
android:textSize="18sp"
android:textStyle="bold" />
</LinearLayout>
ViewPager 的适配器
Fragment和ViewPager中间需要Adapter进行数据的转换,而ViewPager有两种适配器:FragmentPagerAdapter,FragmentStatePagerAdapter。
其中这两种适配器有不同的效果:FragmentPagerAdapter会缓存3个状态,而FragmentStatePagerAdapter适合大量的page。
/**
* Created by 毛凯 on 2018/3/6 0006.
* Email :maokai1229@foxmail.com
*/
public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments;
public MyFragmentPagerAdapter(FragmentManager fm,List<Fragment> fragments) {
super(fm);
this.fragments=fragments;
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
}
关联
MyFragmentPagerAdapter myFragmentPagerAdapter=
new MyFragmentPagerAdapter(getSupportFragmentManager(),fragments);
viewPager.setAdapter(myFragmentPagerAdapter);
viewPager.setOffscreenPageLimit(fragments.size() - 1);
tabLayout.setupWithViewPager(viewPager);