TabLayout+ViewPager的使用
TabLayout+ViewPager的效果
这种布局用的还是很多的,比如微信,知乎上面有不少这种布局。
使用步骤
1.添加依赖
compile 'com.android.support:design:23.3.0'
compile 'com.android.support:support-v4:23.3.0
2.在xml中放一个TabLayout和ViewPager
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="org.xdkitten.study.TabLayoutActivity">
<android.support.design.widget.TabLayout
android:layout_width="match_parent"
android:layout_height="45dp"
android:id="@+id/tab_layout"
android:layout_alignParentTop="true">
</android.support.design.widget.TabLayout>
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/tab_layout"
android:layout_alignParentBottom="true">
</android.support.v4.view.ViewPager>
</RelativeLayout>
3.在java文件中写adapter
class TabFragmentAdapter extends FragmentStatePagerAdapter{
List<String> titileList;
List<TabFragment> fmList;
public TabFragmentAdapter(FragmentManager fm,List<TabFragment> fmList,List<String> titileList) {
super(fm);
this.fmList=fmList;
this.titileList=titileList;
}
@Override
public Fragment getItem(int position) {
return fmList.get(position);
}
@Override
public int getCount() {
if(fmList==null){
return 0;
}else{
return fmList.size();
}
}
@Override
public CharSequence getPageTitle(int position) {
return titileList.get(position);
}
}
adapter中有两个List一个存Fragment,一个存标题。
重写以getItem,getCount,getPageTitle函数(其实也不一定都要重写)
4.主代码
private TabLayout tabLayout;
private ViewPager viewPager;
private List<String> titleList = new ArrayList<String>();
private List<TabFragment> fmList=new ArrayList<TabFragment>();
viewPager= (ViewPager) findViewById(R.id.view_pager);
tabLayout= (TabLayout) findViewById(R.id.tab_layout);
//初始化标题以及Fragment内容
for(int i=0;i<4;i++){
titleList.add("fm"+i);
TabFragment fm=TabFragment.newInstance("This is TabFragment "+i);
fmList.add(fm);
}
viewPager.setAdapter(new TabFragmentAdapter(getSupportFragmentManager(),fmList,titleList));
tabLayout.setupWithViewPager(viewPager);
到目前为止就可以实现一开头出现的效果了,但是实际上我们还可以去设置其他很多的效果。
常用属性与方法
在TabLayout中添加如下代码
app:tabSelectedTextColor="@android:color/holo_blue_bright"
app:tabTextColor="@android:color/black"
app:tabIndicatorColor="@android:color/holo_blue_bright"
效果
这3个常用属性的作用是
- app:tabSelectedTextColor:Tab被选中字体的颜色
- app:tabTextColor:Tab未被选中字体的颜色
- app:tabIndicatorColor:Tab指示器下标的颜色
TabLayout常用的方法如下:
- addTab(TabLayout.Tab tab, int position, boolean setSelected) 增加选项卡到 layout 中
- addTab(TabLayout.Tab tab, boolean setSelected) 同上
- addTab(TabLayout.Tab tab) 同上
- getTabAt(int index) 得到选项卡
- getTabCount() 得到选项卡的总个数
- getTabGravity() 得到 tab 的 Gravity
- getTabMode() 得到 tab 的模式
- getTabTextColors() 得到 tab 中文本的颜色
- newTab() 新建个 tab
- removeAllTabs() 移除所有的 tab
- removeTab(TabLayout.Tab tab) 移除指定的 tab
- removeTabAt(int position) 移除指定位置的 tab
- setOnTabSelectedListener(TabLayout.OnTabSelectedListener onTabSelectedListener) 为每个 tab 增加选择监听器
- setScrollPosition(int position, float positionOffset, boolean updateSelectedText) 设置滚动位置
- setTabGravity(int gravity) 设置 Gravity
- setTabMode(int mode) 设置 Mode,有两种值:TabLayout.MODE_SCROLLABLE和TabLayout.MODE_FIXED分别表示当tab的内容超过屏幕宽度是否支持横向水平滑动,第一种支持滑动,第二种不支持,默认不支持水平滑动。
- setTabTextColors(ColorStateList textColor) 设置 tab 中文本的颜色
- setTabTextColors(int normalColor, int selectedColor) 设置 tab 中文本的颜色 默认 选中
- setTabsFromPagerAdapter(PagerAdapter adapter) 设置 PagerAdapter
- setupWithViewPager(ViewPager viewPager) 和 ViewPager 联动
- tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);//设置tab模式为可以滑动
以上常用属性和方法来自http://blog.csdn.net/feiduclear_up/article/details/46500865
尝试着给tab都改个名
TabLayout.Tab tab0=tabLayout.getTabAt(0);
tab0.setText("Change");
效果