ViewPagerIndicator
TabPageIndicator
布局引入,例如:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include layout="@layout/common_top"/> <com.viewpagerindicator.TabPageIndicator android:id="@+id/tab_indictor" android:layout_width="match_parent" android:layout_height="wrap_content"> </com.viewpagerindicator.TabPageIndicator> <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v4.view.ViewPager> </LinearLayout>
继承
FragmentPagerAdapter
重写public CharSequence getPageTitle(int position)
方法。例如:@Override public CharSequence getPageTitle(int position) { return UIUtils.getStringArr(R.array.touzi_tab)[position]; }
TabPageIndicator绑定ViewPager例如:
tabIndictor.setViewPager(pager);
这时的效果是这样的:
经过上面几步已经引入了TabPageIndicator,TabPageIndicator默认的样式不满足我们的需求,下面修改TabPageIndicator的样式。可以在Application里面修改样式,也可以在Activity中修改样式,如果在Application修改那么每个Activity的样式一样。引入TabPageIndicator样式,例如:
android:theme="@style/Theme.PageIndicatorDefaults"
,此时的效果是这样的:
Theme.PageIndicatorDefaults源码:<style name="Theme.PageIndicatorDefaults" parent="android:Theme"> <item name="vpiIconPageIndicatorStyle">@style/Widget.IconPageIndicator</item> <item name="vpiTabPageIndicatorStyle">@style/Widget.TabPageIndicator</item> </style> <style name="Widget"> </style> <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> <style name="TextAppearance.TabPageIndicator" parent="Widget"> <item name="android:textStyle">bold</item> <item name="android:textColor">@color/vpi__dark_theme</item> </style> <style name="Widget.IconPageIndicator" parent="Widget"> <item name="android:layout_marginLeft">6dp</item> <item name="android:layout_marginRight">6dp</item> </style>
自定义viewpagerIndicator样式
<style name="StyledIndicators" parent="@android:style/Theme.Light"> <item name="vpiTabPageIndicatorStyle">@style/CustomTabPageIndicator</item> <item name="android:windowNoTitle">true</item> </style> <style name="CustomTabPageIndicator" parent="Widget.TabPageIndicator"> <item name="android:background">@drawable/tab_indicator</item> <item name="android:textAppearance">@style/CustomTabPageIndicator.Text</item> <item name="android:textSize">14sp</item> <item name="android:dividerPadding">8dp</item> <item name="android:showDividers">middle</item> <item name="android:paddingLeft">10dp</item> <item name="android:paddingRight">10dp</item> <item name="android:fadingEdge">horizontal</item> <item name="android:fadingEdgeLength">8dp</item> </style> <style name="CustomTabPageIndicator.Text" parent="android:TextAppearance.Medium"> <item name="android:typeface">monospace</item> <item name="android:textColor">@drawable/selector_tabtext</item> </style>
最后再引入(如果是多个Fragment嵌套显示,而且是用 View.inflate方法引入,context必须是activity不能是Application的Context,因为Application的Context不带有样式。)
android:theme="@style/StyledIndicators"