//FlycoTabLayout (轻松切换的Tab)

申屠洛华
2023-12-01

1 依赖    8.9k

//TabLayout
    implementation 'com.flyco.tablayout:FlycoTabLayout_Lib:2.1.2@aar'

很详细,很好的解读

tl_indicator_color          color       设置显示器颜色
tl_indicator_height         dimension   设置显示器高度
tl_indicator_width          dimension   设置显示器固定宽度
tl_indicator_margin_left    dimension   设置显示器margin,当indicator_width大于0,无效
tl_indicator_margin_top     dimension   设置显示器margin,当indicator_width大于0,无效
tl_indicator_margin_right   dimension   设置显示器margin,当indicator_width大于0,无效
tl_indicator_margin_bottom  dimension   设置显示器margin,当indicator_width大于0,无效
tl_indicator_corner_radius  dimension   设置显示器圆角弧度
tl_indicator_gravity        enum        设置显示器上方(TOP)还是下方(BOTTOM),只对常规显示器有用
tl_indicator_style          enum        设置显示器为常规(NORMAL)或三角形(TRIANGLE)或背景色块(BLOCK)
tl_underline_color          color       设置下划线颜色
tl_underline_height         dimension   设置下划线高度
tl_underline_gravity        enum        设置下划线上方(TOP)还是下方(BOTTOM)
tl_divider_color            color       设置分割线颜色
tl_divider_width            dimension   设置分割线宽度
tl_divider_padding          dimension   设置分割线的paddingTop和paddingBottom
tl_tab_padding              dimension   设置tab的paddingLeft和paddingRight
tl_tab_space_equal          boolean     设置tab大小等分
tl_tab_width                dimension   设置tab固定大小
tl_textsize                 dimension   设置字体大小
tl_textSelectColor          color       设置字体选中颜色
tl_textUnselectColor        color       设置字体未选中颜色
tl_textBold                 boolean     设置字体加粗
tl_iconWidth                dimension   设置icon宽度(仅支持CommonTabLayout)
tl_iconHeight               dimension   设置icon高度(仅支持CommonTabLayout)
tl_iconVisible              boolean     设置icon是否可见(仅支持CommonTabLayout)
tl_iconGravity              enum        设置icon显示位置,对应Gravity中常量值,左上右下(仅支持CommonTabLayout)
tl_iconMargin               dimension   设置icon与文字间距(仅支持CommonTabLayout)
tl_indicator_anim_enable    boolean     设置显示器支持动画(only for CommonTabLayout)
tl_indicator_anim_duration  integer     设置显示器动画时间(only for CommonTabLayout)
tl_indicator_bounce_enable  boolean     设置显示器支持动画回弹效果(only for CommonTabLayout)
tl_indicator_width_equal_title  boolean 设置显示器与标题一样长(only for SlidingTabLayout)

2 xml布局设置

设置底部横线指示   带滑动效果
<com.flyco.tablayout.CommonTabLayout
            android:id="@+id/tab_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/white"
            tl:tl_indicator_color="#ff45b548"
            tl:tl_indicator_corner_radius="40dp"
            tl:tl_indicator_margin_left="@dimen/qb_px_70"
            tl:tl_indicator_margin_right="@dimen/qb_px_70"
            tl:tl_indicator_style="NORMAL"
            tl:tl_textSelectColor = "#ff45b548"
            tl:tl_underline_color = "#ff45b548"
            tl:tl_tab_space_equal="true"
            tl:tl_textUnselectColor="#ff2c2c2c"
            tl:tl_textsize="15sp"/>


设置圆角背景图指示  带滑动效果

<com.flyco.tablayout.CommonTabLayout
                android:id="@+id/tab_layout"
                android:layout_width="match_parent"
                android:layout_height="@dimen/qb_px_95"
                android:background="@color/white"
                tl:tl_indicator_color="#fff59438"
                tl:tl_indicator_corner_radius="40dp"
                tl:tl_indicator_margin_left="@dimen/qb_px_70"
                tl:tl_indicator_margin_right="@dimen/qb_px_70"
                tl:tl_indicator_style="BLOCK"
                tl:tl_tab_space_equal="true"
                tl:tl_textUnselectColor="#333"
                tl:tl_textsize="15sp"/>

3 代码可关联其他控件(如:fragment)也可不关联

private void initFragment() {
         String[] mTitles = {"零活信息", "散工信息"};
        mTabEntities.add(new TabEntity(mTitles[0]));
        mTabEntities.add(new TabEntity(mTitles[1]));
        tabLayout.setTabData(mTabEntities);
        tabLayout.setOnTabSelectListener(new OnTabSelectListener() {
            @Override
            public void onTabSelect(int position) {
                Log.i("*****","select:"+position);
            }

            @Override
            public void onTabReselect(int position) {
                Log.i("*****","unselect:"+position);
            }
        });
//        mFragments.add(JobHotFragment.getInstance("招聘"));//招聘
//        mFragments.add(JobHotFragment.getInstance("求职"));//求职
//        tabLayout.setTabData(mTabEntities, this, R.id.tab_layout_fl, mFragments);
    }

4 关联ViewPager+Fragment (tl:tl_tab_space_equal="true" 等分宽度)

设置关联Viewpager
<com.flyco.tablayout.SlidingTabLayout
        android:id="@+id/tab_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/white"
        android:paddingBottom="@dimen/qb_px_20"
        android:paddingTop="@dimen/qb_px_20"
        tl:tl_indicator_color="@color/main"
        tl:tl_indicator_width_equal_title="true"
        tl:tl_tab_padding="@dimen/qb_px_25"
        tl:tl_tab_space_equal="false"
        tl:tl_textSelectColor="@color/main"
        tl:tl_textUnselectColor="#2c2c2c"
        tl:tl_textsize="16sp"
        />

    <View
        android:layout_width="match_parent"
        android:layout_height="@dimen/qb_px_1"
        android:background="#f2f2f2"/>

    <android.support.v4.view.ViewPager
        android:id="@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
//BaseActivity extends AppCompatActivity

public class PersonalHomeActivity extends BaseActivity {

    private String[] mTitles = {"文章", "问答", "求职招聘", "村务动态", "二手市场", "我的商铺"};
    private ArrayList<Fragment> mFragments = new ArrayList<>();
    private MyPagerAdapter mAdapter;
   
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_personal_home);
        ButterKnife.bind(this);
      
    }
   

    private void InitTabLayout() {
        mAdapter = new MyPagerAdapter(getSupportFragmentManager());
        mVp.setAdapter(mAdapter);
        mFragments.add(PersonalHomeArticleFragment.getInstance(userId));
        mFragments.add(PersonalHomeQuestionFragment.getInstance(userId));
        mFragments.add(PersonalHomeJobFragment.getInstance(userId));
        mFragments.add(PersonalHomeCountrySideFragment.getInstance(userId));
        mFragments.add(PersonalHomeSecondFragment.getInstance(userId));
        mFragments.add(MyGoodsFragment.getInstance(userId));
        mTabLayout.setViewPager(mVp, mTitles, this, mFragments);
    }

    private class MyPagerAdapter extends FragmentPagerAdapter {
        public MyPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public int getCount() {
            return mFragments.size();
        }

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

        @Override
        public Fragment getItem(int position) {
            return mFragments.get(position);
        }
    }

  
}

FlycoTabLayout_Lib包含三种常用的效果:

1.CommonTabLayout(文字,下划线点击切换效果)

2.SegmentTabLayout(文字,按钮点击切换效果)

3.SlidingTabLayout(可水平滑动切换效果)

来一张官方示例的动图,感受一下

本章只介绍CommonTabLayout的简单使用,另外两种实现方式请参阅Github源码介绍及demo

Step1:在app的build.gradle文件中添加第三方项目依赖

Step2:在需要的界面.xml中添加需要使用的控件

关于属性的含义,三种效果的共有属性如下:

共有属性名称格式描述
tl_indicator_colorcolor设置显示器颜色
tl_indicator_heightdimension设置显示器高度
tl_indicator_margin_leftdimension设置显示器margin,当indicator_width大于0,无效
tl_indicator_margin_topdimension设置显示器margin,当indicator_width大于0,无效
tl_indicator_margin_rightdimension设置显示器margin,当indicator_width大于0,无效
tl_indicator_margin_bottomdimension设置显示器margin,当indicator_width大于0,无效
tl_indicator_corner_radiusdimension设置显示器圆角弧度
tl_divider_colorcolor设置分割线颜色
tl_divider_widthdimension设置分割线宽度
tl_divider_paddingdimension设置分割线的paddingTop和paddingBottom
tl_tab_paddingdimension设置tab的paddingLeft和paddingRight
tl_tab_space_equalboolean设置tab大小等分
tl_tab_widthdimension设置tab固定大小
tl_textsizedimension设置字体大小
tl_textSelectColorcolor设置字体选中颜色
tl_textUnselectColorcolor设置字体未选中颜色
tl_textBoldboolean设置字体加粗
tl_textAllCapsboolean设置字体全大写

CommonTabLayout的特有属性如下:

特有属性格式描述
tl_indicator_widthdimension设置显示器固定宽度
tl_indicator_gravityenum设置显示器上方(TOP)还是下方(BOTTOM),只对常规显示器有用
tl_indicator_styleenum设置显示器为常规(NORMAL)或三角形(TRIANGLE)或背景色块(BLOCK)
tl_indicator_anim_enableboolean设置显示器支持动画(only for CommonTabLayout)
tl_indicator_anim_durationinteger设置显示器动画时间(only for CommonTabLayout)
tl_indicator_bounce_enableboolean设置显示器支持动画回弹效果(only for CommonTabLayout)
tl_underline_colorcolor设置下划线颜色
tl_underline_heightdimension设置下划线高度
tl_underline_gravityenum设置下划线上方(TOP)还是下方(BOTTOM)
tl_iconWidthdimension设置icon宽度(仅支持CommonTabLayout)
tl_iconHeightdimension设置icon高度(仅支持CommonTabLayout)
tl_iconVisibleboolean设置icon是否可见(仅支持CommonTabLayout)
tl_iconGravityenum设置icon显示位置,对应Gravity中常量值,左上右下(仅支持CommonTabLayout),LEFT,RIGHT,TOP,BOTTOM
tl_iconMargindimension设置icon与文字间距(仅支持CommonTabLayout)

SegmentTabLayout的特有属性如下:

特有属性格式描述
tl_indicator_anim_enableboolean设置显示器支持动画
tl_indicator_anim_durationinteger设置显示器动画时间
tl_indicator_bounce_enableboolean设置显示器支持动画回弹效果
tl_bar_colorcolor设置整体颜色
tl_bar_stroke_colorcolor设置边框颜色
tl_bar_stroke_widthdimension设置边框粗细

SlidingTabLayout的特有属性如下:

特有属性格式描述
tl_indicator_widthdimension设置显示器固定宽度
tl_indicator_gravityenum设置显示器上方(TOP)还是下方(BOTTOM),只对常规显示器有用
tl_indicator_styleenum设置显示器为常规(NORMAL)或三角形(TRIANGLE)或背景色块(BLOCK)
tl_indicator_width_equal_titleboolean设置显示器与标题一样长(only for SlidingTabLayout)
tl_underline_colorcolor设置下划线颜色
tl_underline_heightdimension设置下划线高度
tl_underline_gravityenum设置下划线上方(TOP)还是下方(BOTTOM)

Step3:使用

    1.添加要显示的tab项文字;

     2.设置tab点击监听。

onTabSelect 方法中的position就是点击的tab对应的下标,根据下标区分要进行的下一步操作。

好了,关于FlycoTabLayout_Lib库中的CommonTabLayout的使用就先介绍到这里,总体来说是很简单的(现在想想以前自己写的有多复杂,太不实用的,也没有这么灵活)。

 类似资料: