1.增加jar包 - com.viewpagerindicator:library:2.4.1
2、找到ViewPagerIndicator给的Sample,找到自己需要的视图,然后拷贝代码即可,依照TabPageIndicator为例
3、代码
Activity.class
java:注意:Activity一定要写主题为android:theme="@style/AppTheme" <pre name="code" class="java">package com.huiting.activity; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.ActionBar; import android.support.v7.widget.SearchView; import android.view.Gravity; import android.view.Menu; import android.view.View; import com.huiting.R; import com.huiting.fragment.MainActivityFactoryFragment; import com.huiting.tools.LogUtils; import com.viewpagerindicator.TabPageIndicator; /** * 绘厅 * Created by zst on 16/1/15. */ public class HallActivity extends BaseActivity { private static final String[] CONTENT = new String[] { "Recent", "Artists", "Albums", "Songs", "Playlists", "Genres" }; @Override protected void initActionBar() { super.initActionBar(); ActionBar actionBar = getSupportActionBar(); //标题布局配置 ActionBar.LayoutParams alTitle = new ActionBar.LayoutParams( ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT, Gravity.CENTER ); View viewTitleBar = getLayoutInflater().inflate(R.layout.title_hall, null); //标题自定义 actionBar.setCustomView(viewTitleBar, alTitle); actionBar.setDisplayHomeAsUpEnabled(false);//去掉导航 actionBar.setDisplayShowTitleEnabled(false);//去掉标题 actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);//设置自定义的Custom actionBar.setDisplayShowCustomEnabled(true);//显示自定义Custom //返回自定义 actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setHomeAsUpIndicator(R.mipmap.btn_back); actionBar.setDisplayShowHomeEnabled(true); } @Override protected void init() { super.init(); } @Override protected void initView() { super.initView(); setContentView(R.layout.activity_hall); FragmentStatePagerAdapter adapter = new MyAdapter(getSupportFragmentManager()); ViewPager pager = (ViewPager)findViewById(R.id.pager); pager.setAdapter(adapter); TabPageIndicator indicator = (TabPageIndicator)findViewById(R.id.indicator); indicator.setViewPager(pager); LogUtils.d("哈哈哈哈", indicator + ""); indicator.setVisibility(View.VISIBLE); } class MyAdapter extends FragmentStatePagerAdapter { public MyAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return MainActivityFactoryFragment.createFragment(position); } @Override public CharSequence getPageTitle(int position) { return CONTENT[position % CONTENT.length].toUpperCase(); } @Override public int getCount() { return CONTENT.length; } } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <com.viewpagerindicator.TabPageIndicator android:id="@+id/indicator" android:layout_height="wrap_content" android:layout_width="fill_parent" android:visibility="gone" /> <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" /> </LinearLayout>
<resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <!-- 去除ActionBar阴影 --> <item name="android:windowContentOverlay">@null</item> <!-- 设置ActionBar背景色 --> <item name="android:actionBarStyle">@style/MyActionBar</item> <!-- 设置ActionBar背景色 - 兼容 --> <item name="actionBarStyle">@style/MyActionBar</item> <!-- ViewPager Indicator--> <item name="vpiTabPageIndicatorStyle">@style/CustomTabPageIndicator</item> </style> <!-- ActionBar属性 --> <style name="MyActionBar" parent="@style/Widget.AppCompat.ActionBar"> <item name="android:background">@color/app_bg_color</item> <!-- Support library compatibility --> <item name="background">@color/app_bg_color</item> <!-- 高度 --> <item name="android:height">50dip</item> <!-- Support library compatibility --> <item name="height">50dip</item> </style> <!-- Viewpager indicator - vpiTabPageIndicatorStyle --> <style name="CustomTabPageIndicator" parent="Widget.TabPageIndicator"> <!--<item name="android:background">@drawable/custom_tab_indicator</item>--> <!--<item name="android:textAppearance">@style/CustomTabPageIndicator.Text</item>--> <item name="android:textColor">#FF555555</item> <item name="android:textSize">16sp</item> <!--<item name="android:divider">@drawable/custom_tab_indicator_divider</item>--> <item name="android:dividerPadding">10dp</item> <item name="android:showDividers">middle</item> <item name="android:paddingLeft">8dp</item> <item name="android:paddingRight">8dp</item> <item name="android:fadingEdge">horizontal</item> <item name="android:fadingEdgeLength">8dp</item> </style> </resources>
以上是所有代码,有注释,下面是报错:
报错一:
报错:Failed to find style ‘vpiTabPageIndicatorStyle’ in current theme 解决:在AppTheme中设置vpiTabPageIndicatorStyle
报错二:
报错:java.lang.IllegalStateException: ViewPager has not been bound 解决:将TabPageIndicator 设置为:android:visibility=“gone”,数据加载完成后再设置为visiable即可。
报错三:
报错:java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.Fragment.setMenuVisibility(boolean)' on a null object reference 解决:布局一定是Fragment <span style="color:#808000;"> </span><pre name="code" class="java">@Override public Fragment getItem(int position) { return MainActivityFactoryFragment.createFragment(position); }
报错四:
报错:java.lang.NullPointerException: Attempt to write to field 'android.support.v4.app.FragmentManagerImpl android.support.v4.app.Fragment.mFragmentManager' on a null object reference 解决:ViewPagerIndicator中Simple给的示例FragmentPagerAdapter 改成 FragmentStatePagerAdapter 即可