PagerSlidingTabStrip配合使用

PagerSlidingTabStrip配合使用Fragment

TabLayout的加强版

项目地址 https://github.com/astuetz/PagerSlidingTabStrip

使用
这是一个有坑的控件,直接使用属性部分会对应不上,还会出现奔溃等一系列问题。坠入坑里一天时间,网上博客太不负责了,自己没编译一下就贴别人的,搞得我以为自己电脑有问题,测试了多台电脑证明这个坑,解决方案就是把资源拷出来使用,然后就ok了。接下来我将介绍我跳出这个坑的方法。

但不是所用控件出问题都能这么解决的,这个比较裸,有的控件的依赖资源还会代码混淆啥的,就没办法了。

1.引进依赖,将依赖资源拷贝出来

在bulid.gradle app的目录下引进如下依赖

implementation 'com.astuetz:pagerslidingtabstrip:1.0.1'

拷贝过程就是找到对应的导入的外部依赖,从这个位置,然后打开External Libraries
在这里插入图片描述
然后如下资源中拷贝到我们项目的对应目录下,即PagerSlidingTabStrip的class文件还有drawable和values对应的xml文件
在这里插入图片描述
最后就是把之前引进的依赖删除。
经过这些项目就能愉快地运行了,不会出现app:pstsDividerColor="#aaf1fa"
app:pstsIndicatorColor="#ffafff"
app:pstsUnderlineColor="@color/colorAccent"这些属性的错位,还有app:pstsShouldExpand="true"的崩溃问题

2.创建MainActivity的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <com.example.tingyu.pagerslidingtabstriplearn.PagerSlidingTabStrip
        android:id="@+id/tabs"
        app:pstsDividerColor="#aaf1fa"
        app:pstsIndicatorColor="#ffafff"
        app:pstsUnderlineColor="@color/colorAccent"
        app:pstsUnderlineHeight="20dp"
        android:layout_width="match_parent"
        android:layout_height="40dp">
  </com.example.tingyu.pagerslidingtabstriplearn.PagerSlidingTabStrip>

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

</LinearLayout>

ViewPager是下部页面,会配合Fragment和上部标题栏PagerSlidingTabStrip的项进行一些滑动切换效果。

</com.example.tingyu.pagerslidingtabstriplearn.PagerSlidingTabStrip>这里是我PagerSlidingTabStrip类的地址,在自己电脑上使用只需对应上自己的目录地址。打出PagerSlidingTabStrip字样,然后安卓的提示点击一下就会自动补全。
这里有些属性我亲自试的,没问题

//分割线的上下间距,类似于paddingTop和paddingBottom
app:pstsDividerPadding=“15dp”
//tab之间分割线颜色
app:pstsDividerColor="#0011dd"
//是否平分顶部空间,true平分,false从左到右排列
app:pstsShouldExpand=“true”
//当前页面对应标签的指示线颜色
app:pstsIndicatorColor="#FFFFA500"
//指示线高度
app:pstsIndicatorHeight=“5dp”
//整个title的下划线颜色
app:pstsUnderlineColor="@color/colorAccent"
//下划线高度
app:pstsUnderlineHeight=“3dp”
//标签的背景色,只有有标签的部分才有颜色,当pstsShouldExpand为false,标签不能满屏幕时,就很丑了
app:pstsTabBackground="@color/colorAccent"
//标签左右间距
app:pstsTabPaddingLeftRight=“50dp"
//标题全是大写字母
app:pstsTextAllCaps=“true”
这个我不太清楚
pstsScrollOffset Scroll offset of the selected tab 滚动选定选项卡的偏移量

找了一个别人的图

在这里插入图片描述

3.创建一个Fragment

创建直接选Fragment就可以了,回生成好多,保留着三个方法暂时就够了。布局文件自己随便写一个就行,用于下边的展示。

import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

//Fragment一般需要重写三个方法 onCreate(),onCreateView()和它的一个构造方法
public class PageFragment extends Fragment {
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    public static final String ARG_PAGE = "ARG_PAGE";

    private  int mpage;

    public PageFragment() {
        // Required empty public constructor
    }

    /**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     * @return A new instance of fragment PageFragment.
     */
    public static PageFragment newInstance(int page) {
        PageFragment fragment = new PageFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_PAGE, page);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
            mpage = getArguments().getInt(ARG_PAGE);
    }

    //这里需要把定义的布局联系起来
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view=inflater.inflate(R.layout.fragment_page, container, false);
        //给标题部分进行定义
        TextView title=(TextView) view.findViewById(R.id.title);
        title.setText("Fragment #"+mpage);

        // Inflate the layout for this fragment
        return view;
    }
}

4.构造适配器Adapter
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class SampleFragmentPagerAdapter extends FragmentPagerAdapter {

    final int PAGE_COUNT=3;
    private String tabTitles[]=new String[]{"1","2","3"};

    public SampleFragmentPagerAdapter(FragmentManager fm){
        super(fm);
    }
    @Override
    public Fragment getItem(int position) {
        return PageFragment.newInstance(position+1);
    }

    @Override
    public int getCount() {
        return PAGE_COUNT;
    }
    @Override
    public CharSequence getPageTitle(int position){
        return tabTitles[position];
    }
}
5.在主活动中进行相应配置
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //找到ViewPager,适配器SampleFragmentPagerAdapter适配一下
        ViewPager viewPager=(ViewPager)findViewById(R.id.viewPager);
        viewPager.setAdapter(new SampleFragmentPagerAdapter(getSupportFragmentManager()));

        PagerSlidingTabStrip tabsStrip=(PagerSlidingTabStrip)findViewById(R.id.tabs);
        //把标题和页面联系起来
        tabsStrip.setViewPager(viewPager);
    }
}

在这里插入图片描述
最后效果是这样的。
后续效果后面再弄吧

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值