TabLayout显示固定的标签数

本文介绍了如何通过分析TabLayout源码并自定义组件,解决TabLayout无法设置固定标签数的问题,以达到类似网易新闻和今日头条的界面效果。通过设置mScrollableTabMinWidth,实现了对TabView宽度的控制。

       TabLayout是Android Design Support Library库中的控件,利用TabLayout可以实现类似网易或者今日头条的效果,但是因为TabLayout不能设置界面显示的固定标签数,所以一直将它将她打入冷宫,未曾临幸于她。但是这么好的一个妃子,仅仅因为这点缺点就不用她,未免有点可惜。所以今天有时间我又看了下TabLayout的源码。

/**
     * Create and return a new {@link Tab}. You need to manually add this using
     * {@link #addTab(Tab)} or a related method.
     *
     * @return A new Tab
     * @see #addTab(Tab)
     */
    @NonNull
    public Tab newTab() {
        Tab tab = sTabPool.acquire();
        if (tab == null) {
            tab = new Tab();
        }
        tab.mParent = this;
        tab.mView = createTabView(tab);
        return tab;
    }
可以看到tabView是在createTabView里创建,再看下 createTabView的源码:

    private TabView createTabView(@NonNull final Tab tab) {
        TabView tabView = mTabViewPool != null ? mTabViewPool.acquire() : null;
        if (tabView == null) {
            tabView = new TabView(getContext());
        }
        tabView.setTab(tab);
        tabView.setFocusable(true);
        tabView.setMinimumWidth(getTabMinWidth());
        return tabView;
    }
TabView的高度是在getTabMinWidth方法里设置,再看下 getTabMinWidth方法:

private int getTabMinWidth() {
        if (mRequestedTabMinWidth != INVALID_WIDTH) {
            // If we have been given a min width, use it
            return mRequestedTabMinWidth;
        }
        // Else, we'll use the default value
        return mMode == MODE_SCROLLABLE ? mScrollableTabMinWidth : 0;
    }
有两种设置TabVIew宽度的方式,在这里我们没必要设置 app : tabMinWidth这个属性,因为屏幕的宽度是不固定的,我们不可能将tabView的宽度设死。所以就跑到else的方法里。在这里mMode的模式有两种MODE_SCROLLABLE和MODE_FIXED,MODE_FIXED是一下子展示所有的TabView,MODE_SCROLLABLE是展示部分的TabView,其他的TabView通过滑动来实现,说
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值