ViewPager+PagerSildingTapStrip联合使用方法精炼详解

一、前期基础知识储备

前面一篇文章里《ViewPager和ViewPager+Fragment联合使用方法精炼详解》,笔者详细介绍了,ViewPager的使用方式,包括和Fragment的搭配使用,基本上做到了一个仿微信的切换效果,但是实现方式不够优雅,要分别为菜单栏和ViewPager设置监听事件,处理起来稍显麻烦,今天本节文章将分析另一个控件PagerSlidingTapStrip,该控件+ViewPager可以更为优雅的实现上述的效果,而不用来回设置监听事件,所有的逻辑都已封装到了PagerSlidingTabStrip.setViewPager()方法里。

二、上代码,具体实现

第一步:build.gradle文件中添加依赖;

compile 'com.astuetz:pagerslidingtabstrip:1.0.1'

第二步:创建三个碎片布局;

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#F44336"
    android:gravity="center"
    android:orientation="vertical">


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="1"
        android:gravity="center"
        android:textColor="#d9d8d8"
        android:textSize="54sp"
        android:textStyle="bold" />
</LinearLayout>

由于代码重复,就不全贴出来了;

第三步:创建三个碎片,引入碎片布局;

public class OneFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater,
                             @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.view_one, null);
        return view;
    }
}

由于代码重复,就不全贴出来了;

第四步:创建ViewPager的适配器——核心代码;

public class MyPagerAdapter extends FragmentPagerAdapter {

    private Fragment[] mFragments;
    private String[] mTitles;

    //这段构造器,在创建适配器时就会提示进行复写,这里我们传入三个参数
    //用户看的见的界面,可以来自于静态布局,可以来自于Java代码动态设置,也可以来自适配器
    public MyPagerAdapter(FragmentManager fm, Fragment[] fragments, String[] titles) {
        super(fm);
        this.mFragments = fragments;
        this.mTitles = titles;
    }

    @Override
    public Fragment getItem(int position) {
        return mFragments[position];
    }

    @Override
    public int getCount() {
        return mFragments.length;
    }
    //使用ViewPager+PagerSildingTapStrip时必须复写
    public CharSequence getPageTitle(int position) {
        return mTitles[position];
    }
}

这里,我们继承自碎片专属的适配器FragmentPagerAdapter,并且创建有三个参数的构造器——①碎片管理器,FragmentManager;②碎片实体,fragments;③指示标题栏,titles;并且要复写三个重要的方法;

第五步:创建主布局文件;

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.administrator.douban.MainActivity">

    <com.astuetz.PagerSlidingTabStrip xmlns:tab="http://schemas.android.com/apk/res-auto"
        android:id="@+id/tab"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#fafafa"
        android:paddingBottom="10dp"
        android:paddingTop="10dp"
        android:textColor="#333333"
        android:textSize="13sp"
        tab:pstsDividerColor="#ed6865"
        tab:pstsIndicatorColor="#9e9b9b"
        tab:pstsIndicatorHeight="2dp"
        tab:pstsShouldExpand="true"
        tab:pstsTabBackground="@android:color/transparent"
        tab:pstsUnderlineColor="@android:color/transparent" />

    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </android.support.v4.view.ViewPager>


</LinearLayout>

这里,我们对PagerSildingTapStrip的属性进行了详细的设计,文章下面会对属性进行详细讲解

第六步:创建主Activity;

public class MainActivity extends AppCompatActivity {

    private PagerSlidingTabStrip mPagerSlidingTabStrip;
    private ViewPager mViewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        android.support.v7.app.ActionBar actionBar = getSupportActionBar();
        if(actionBar != null){
            actionBar.hide();
        }
        mPagerSlidingTabStrip = (PagerSlidingTabStrip) findViewById(R.id.tab);
        mViewPager = (ViewPager) findViewById(R.id.viewPager);
        //初始化数据——碎片布局和标题栏
        Fragment[] fragments = {new OneFragment(),new TwoFragment(),new ThreeFragment()};
        String[] titles = {"主页", "娱乐", "科技",};
        //为ViewPager绑定碎片适配器,同时为PagerSlidingTabStrip绑定ViewPager
        //注意第二个绑定方法要执行在第一个适配器绑定方法之后
        MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager(), fragments, titles);
        mViewPager.setAdapter(adapter);
        mPagerSlidingTabStrip.setViewPager(mViewPager);
    }
}

在主Activity代码中,我们创建碎片实例,标题实例,并且分别绑定

①ViewPager和适配器;

②PagerSildingTapStrip和ViewPager,注意两次绑定的顺序千万不能弄反,否则会报错。

运行效果如下:


下面对PagerSildingTapStrip的属性进行说明:

android:textColorPrimary 文字颜色

pstsIndicatorColor 滑动指示器颜色

pstsIndicatorHeight 滑动指示器高度

pstsUnderlineColor 视图的底部的全宽线的颜色

pstsUnderlineHeight 视图的底部的全宽线的高度

pstsDividerColor 选项卡之间的分隔线的颜色

pstsDividerWidth 选项卡之间的分隔线的宽度

pstsDividerPadding 选项卡之间的分隔线的Pading填充

pstsShouldExpand 如果设置为true,每个选项卡都是相同的weight,即LinearLayout的权重一样,默认为false

pstsScrollOffset 滑动Tab的偏移量

pstsPaddingMiddle 如果true,视图的标签会以居中显示的方式呈现。

pstsTabPaddingLeftRight 每个标签左右填充宽度

pstsTabBackground 每个标签的背景,应该是一个selector,checked=”true/false”对应不同的背景

pstsTabTextSize Tab标签的文字大小

pstsTabTextColor Tab标签的文字颜色

pstsTabTextStyle

pstsTabTextAllCaps 如果为true,所有标签都是大写字母,默认为true

pstsTabTextAlpha 设置文本alpha透明度不选中的选项卡。0 . . 255之间,150是默认值。

pstsTabTextFontFamily Tab标签文字的字体

setTypeface(Typeface typeface, int style) 设置字体,把字体放入assets里通过该方法调用

读者可以参考下图:来源:《【Android开源库】 PagerSlidingTabStrip从头到脚》,讲解的十分详细!

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值