TabLayout实现自定义标题栏目功能

本文介绍如何在TabLayout中实现自定义标题,包括图文展示。通过代码示例展示了自定义布局文件和Java代码的实现过程。

TabLayout实现自定义标题栏目功能

1、前提

在平时的工作中,大家都会使用到TabLayout,默认情况下TabLayout支持文字的,需要支持图文或者自定义就需要自己来写了。
先上一张图:

2、直接上代码

布局文件

<android.support.design.widget.TabLayout
        android:id="@+id/tab_layout"
        android:layout_width="0pt"
        android:layout_height="150pt"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/view_linear_bill"
        android:background="@color/color_ffffff"
        app:tabContentStart="20pt"
        app:tabGravity="fill"
        app:tabIndicatorColor="@color/color_333333"
        app:tabIndicatorFullWidth="false"
        app:tabIndicatorHeight="5pt"
        app:tabUnboundedRipple="true"
        app:tabMode="scrollable"
        app:tabPaddingBottom="20pt"
        app:tabPaddingTop="20pt"
        app:tabSelectedTextColor="@color/color_333333"
        app:tabTextAppearance="@style/tab_style"
        app:tabTextColor="@color/color_333333" />

    <android.support.v4.view.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="0pt"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/tab_layout"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_height="0pt" />

你自定义的布局文件

<?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="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@drawable/shape_order_choose"
        android:textSize="43pt"
        tools:text="测试" />

    <com.base.util.baseui.widget.view.RTextView
        android:id="@+id/tv_num"
        android:layout_width="60pt"
        android:layout_height="60pt"
        android:ellipsize="end"
        android:visibility="gone"
        android:gravity="center"
        android:maxLength="3"
        android:textColor="@color/color_d80c18"
        android:textSize="35pt"
        app:background_normal="#FFCBCE"
        app:corner_radius="90pt"
        tools:text="2222" />

</LinearLayout>

java代码

@Override
    protected void initData() {
        // data
        List<String> titleList = new ArrayList<>();
        titleList.add("全部");
        titleList.add("结算收入");
        titleList.add("提现支出");
        titleList.add("退款支出");
        List<Fragment> fragmentList = new ArrayList<>();
        fragmentList.add(FinanceBottomFragment.getInstance(Const.FinanceClass.FinanceClass_0));
        fragmentList.add(FinanceBottomFragment.getInstance(Const.FinanceClass.FinanceClass_1));
        fragmentList.add(FinanceBottomFragment.getInstance(Const.FinanceClass.FinanceClass_2));
        fragmentList.add(FinanceBottomFragment.getInstance(Const.FinanceClass.FinanceClass_3));
        MyFragmentPagerAdapter myFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager(), fragmentList);
        viewPager.setAdapter(myFragmentPagerAdapter);
        viewPager.setOffscreenPageLimit(3);
        tabLayout.setupWithViewPager(viewPager);
        for (int i = 0; i < titleList.size(); i++) {
            tabLayout.getTabAt(i).setCustomView(getTabView(i, titleList.get(i)));
        }
    }

    /**
     * 自定义的TabLayout
     *
     * @param position
     * @param value
     * @return
     */
    public View getTabView(int position, String value) {
        View view = LayoutInflater.from(this).inflate(R.layout.view_tablayout_num, null);
        TextView tv = view.findViewById(R.id.tv_title);
        RTextView num = view.findViewById(R.id.tv_num);
        tv.setText(value);
        num.setText("20");
        num.setVisibility(View.VISIBLE);
        return view;
    }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值