Android - PagerSlidingTabStrip

PagerSlidingTabStrip

因為工作需要一個Tab 滑動,並且下方有三個功能項目不斷滑動的功能

剛好有一個符合需求

https://github.com/astuetz/PagerSlidingTabStrip

再以拿出自己想要的,做簡單做成下面這樣。

首先要在Activity的onCreate加入以下程式碼

private MyPagerAdapter adapter;
public void initTabViewPager() {
   //Initialize the ViewPager and set an adapter
   adapter = new MyPagerAdapter(getSupportFragmentManager());
   ViewPager pager = (ViewPager) findViewById(R.id.pager);
   pager.setAdapter(adapter);

   // Bind the tabs to the ViewPager
   PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
   tabs.setShouldExpand(true);
   tabs.setViewPager(pager);
   tabs.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
      @Override
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

      }

      @Override
      public void onPageSelected(int position) {

      }

      @Override
      public void onPageScrollStateChanged(int state) {

      }
   });
}

一樣在Activity定義Adapter

public class MyPagerAdapter extends FragmentPagerAdapter {

   private final String[] TITLES = { "線上詢問","應徵紀錄","信件通知" };

   public MyPagerAdapter(FragmentManager fm) {
      super(fm);
   }

   @Override
   public CharSequence getPageTitle(int position) {
      return TITLES[position];
   }

   @Override
   public int getCount() {
      return TITLES.length;
   }

   @Override
   public Fragment getItem(int position) {
      return MyFragment.newInstance(position,TITLES[position]);
   }
}

另外在編寫一個Fragment

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.FrameLayout.LayoutParams;
import android.widget.TextView;

public class MyFragment extends Fragment {

    private static final String ARG_POSITION = "position";
    private static final String ARG_TITLE = "title";

    private int position;
    private String title;

    public static MyFragment newInstance(int position,String title) {
        MyFragment f = new MyFragment();
        Bundle b = new Bundle();
        b.putInt(ARG_POSITION, position);
        b.putString(ARG_TITLE, title);
        f.setArguments(b);
        return f;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        position = getArguments().getInt(ARG_POSITION);
        title = getArguments().getString(ARG_TITLE);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

        FrameLayout fl = new FrameLayout(getActivity());
        fl.setLayoutParams(params);

        final int margin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, getResources()
                .getDisplayMetrics());

        TextView v = new TextView(getActivity());
        params.setMargins(margin, margin, margin, margin);
        v.setLayoutParams(params);
        v.setLayoutParams(params);
        v.setGravity(Gravity.CENTER);
        //v.setBackgroundResource(R.drawable.background_card);
        v.setText(title);
        fl.addView(v);
        return fl;
    }

}

另外gradle加入

dependencies {
    compile 'com.astuetz:pagerslidingtabstrip:1.0.1'
}

不確定gradle這樣加是否還能完全執行,因為我有加其它的

如果不行,再加其它的

dependencies {
    compile 'com.google.android.gms:play-services:8.1.0'
    compile 'com.android.support:appcompat-v7:21.0.1'
    compile 'com.android.support:support-v4:21.0.0'
    compile 'com.android.support:multidex:1.0.0'
    compile 'com.astuetz:pagerslidingtabstrip:1.0.1'
}

因為本身版本是minSdk是10,而一般的Android Fragment需要的是11,

但由於作者使用的是 support library v4,所以可以向下相容

import android.support.v4.app.Fragment;

support library v4 fragment,可參考

http://blog.csdn.net/duguang77/article/details/17580993