现在很多的应用页面都是由一个个的TAB组成的,我们可以用布局加事件监听实现tab ,只是这样的控制非常麻烦,而且有很多的开源项目可以实现这样的功能,我们今天就介绍一下ViewPagerIndicator,这个项目就是可以实现这种效果。
首先下载依赖项目
https://github.com/JakeWharton/Android-ViewPagerIndicator
这个页面上有集成到自己项目的方式,大致就是:
1、将该项目设为自己项目的依赖项目。
2、在相应窗口的布局文件中引入TabPageIndicator,在Android-ViewPagerIndicator项目中有很多的tab的样式,它们对应不同的类。
一般我们都是将Android-ViewPagerIndicator与viewpager组合使用,当我们切换tab的时候下面的viewpager也一起切换。<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <com.viewpagerindicator.TabPageIndicator android:id="@+id/indicator" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" /> </LinearLayout>
3、然后在窗口Activity或者Fragment内,我们获取该TabPageIndicator和ViewPager,并将它们关联起来。
pager = (ViewPager) findViewById(R.id.pager); indicator = (TabPageIndicator) findViewById(R.id.indicator); indicator.setViewPager(pager);//关联
4、改变tab的样式,我们这边只看TabPageIndicator的样式修改,其他基本类似。我们进入TabPageIndicator的源码在构造函数。
public TabPageIndicator(Context context, AttributeSet attrs) { super(context, attrs); setHorizontalScrollBarEnabled(false); mTabLayout = new IcsLinearLayout(context, R.attr.vpiTabPageIndicatorStyle); addView(mTabLayout, new ViewGroup.LayoutParams(WRAP_CONTENT, MATCH_PARENT)); }
我们可以看出TabPageIndicator使用的是vpiTabPageIndicatorStyle样式。我们可以在依赖项目中看到系统自带的样式,在依赖项目的values/vpi_styles.xml文件中,这里面定义了所有tab类型的样式。
<style name="Widget.TabPageIndicator" parent="Widget"> <item name="android:gravity">center</item> <item name="android:background">@drawable/vpi__tab_indicator</item> <item name="android:paddingLeft">22dip</item> <item name="android:paddingRight">22dip</item> <item name="android:paddingTop">12dp</item> <item name="android:paddingBottom">12dp</item> <item name="android:textAppearance">@style/TextAppearance.TabPageIndicator</item> <item name="android:textSize">12sp</item> <item name="android:maxLines">1</item> </style>
我们可以根据自己的需要继承这个样式并修改。
到这里基本就OK了。Android-ViewPagerIndicator的集成非常简单的。
Android-ViewPagerIndicator可以与ActionBarSherlock合成开发的。非常方便
最后附上我的Viewpager适配器的类
private class MyViewPagerAdapter extends FragmentPagerAdapter { private List<SelectItem> mList = new ArrayList<SelectItem>(); public void setSelects(List<SelectItem> list) { this.mList = list; } public MyViewPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return mList.get(position).fragment; } @Override public CharSequence getPageTitle(int position) { return mList.get(position).desc; } @Override public int getCount() { return mList.size(); } }