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");

效果

posted @ 2016-07-15 22:00  xdzhcs  阅读(4893)  评论(1编辑  收藏  举报