1. 程式人生 > >實現螢幕切換、滑動-ViewPager詳解(二)之--------PagerTitleStrip與PagerTabStrip新增標題欄

實現螢幕切換、滑動-ViewPager詳解(二)之--------PagerTitleStrip與PagerTabStrip新增標題欄

PagerTabStrip

1.PagerTabStrip概述:(API解釋)

PagerTabStrip是ViewPager的一個關於當前頁面、上一個頁面和下一個頁面的一個非互動的指示器。它經常作為ViewPager控制元件的一個子控制元件被被新增在XML佈局檔案中。在你的佈局檔案中,將它作為子控制元件新增在ViewPager中。而且要將它的 android:layout_gravity 屬性設定為TOP或BOTTOM來將它顯示在ViewPager的頂部或底部。每個頁面的標題是通過介面卡的getPageTitle(int)函式提供給ViewPager的。

2.使用:

1>在你的佈局檔案中,將它作為子控制元件新增在ViewPager中。屬性設定為top或者bottom。

2>標題的獲取,是重寫介面卡的getPageTitle(int)函式來獲取的。

PagerTabStrip

1.與PagerTitleStrip的區別:

1、PagerTabStrip在當前頁面下,會有一個下劃線條來提示當前頁面的Tab是哪個。

2、PagerTabStrip的Tab是可以點選的,當用戶點選某一個Tab時,當前頁面就會跳轉到這個頁面,而PagerTitleStrip則沒這個功能。(可互動)

2.用法:

與PagerTitleStrip完全相同。

3.延伸:

1>更改下劃線顏色:
主要靠PagerTabStrip的setTabIndicatorColorResource方法;

這裡寫圖片描述

4.範例:

xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_gravity="center" > <android.support.v4.view.PagerTabStrip android:id="@+id/pagerTabStrip" android:layout_width="match_parent" android:layout_height="wrap_content" /> </android.support.v4.view.ViewPager> </RelativeLayout>

四個view佈局這裡不再總結,

介面卡:

public class MyPagerAdapter extends PagerAdapter {
    private List<View> mviews;
    private String[] mtitles;
    public MyPagerAdapter(List<View> mviews,String[] mtitles){
        this.mviews=mviews;
        this.mtitles=mtitles;

    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return mviews.size();
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        // TODO Auto-generated method stub
        return arg0==arg1;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        // TODO Auto-generated method stub
        container.removeView(mviews.get(position));
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        // TODO Auto-generated method stub
        container.addView(mviews.get(position));
        return mviews.get(position);
    }

    @Override
    public CharSequence getPageTitle(int position) {//重寫此方法,返回標題
        // TODO Auto-generated method stub
        return mtitles[position];
    }



}

java主介面:

public class ThirdActivity extends Activity{
    private ViewPager mViewPager;
    private List<View> mviews;
    private String[] mtitles;
    private LayoutInflater flater;
    private MyPagerAdapter pageradapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_third);
        mViewPager = (ViewPager) findViewById(R.id.viewPager);
        flater = getLayoutInflater();
        init();
        pageradapter = new MyPagerAdapter(mviews, mtitles);
        mViewPager.setAdapter(pageradapter);

    }

    private void init() {
        // TODO Auto-generated method stub
        mviews = new ArrayList<View>();
        View view1 = flater.inflate(R.layout.view1, null);
        View view2 = flater.inflate(R.layout.view2, null);
        View view3 = flater.inflate(R.layout.view3, null);
        View view4 = flater.inflate(R.layout.view4, null);
        mviews.add(view1);
        mviews.add(view2);
        mviews.add(view3);
        mviews.add(view4);

        mtitles = new String[]{"標題1","標題2","標題3","標題4"};

    }

}

結果演示:
這裡寫圖片描述

總結:

通過前面的講解,我們應該清楚的認識到PagerTabStrip與PagerTitleStrip在新增標題欄的異同,但他們實現的標題欄效果很不好,不能指定一個頁面一次顯示一個,或者全部顯示,而且標題還滑動。所以註定主流的App都沒有用這個玩意的。所以這裡也只是一個過渡,在開發中,我們也不建議使用這兩個東東
注意:在主介面資料改變時,也要複寫notifyDataSetChanged() 來重新整理資料。