Android TabLayout

本文介绍了在Android中如何使用TabLayout和ViewPager实现一个带有下拉菜单的Tab效果。通过自定义TabLayout的Tab,设置自定义View并绑定PopWindow来创建下拉菜单。同时,监听ViewPager的切换事件来改变View的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android中的TabLayout配合ViewPager使用组合是目前非常常见的一种展现方式。具体的xml配置如下:

<RelativeLayout
        android:id="@+id/layout_tabs"
        android:layout_width="match_parent"
        android:layout_height="42dp"
        android:layout_below="@id/layout_title">

        <android.support.design.widget.TabLayout
            android:id="@+id/sliding_tabs"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/white"
            app:tabGravity="fill"
            app:tabIndicatorColor="@color/app_main_color"
            app:tabIndicatorHeight="3dp"
            app:tabMode="fixed"
            app:tabSelectedTextColor="@color/app_main_color"
            app:tabTextAppearance="@style/MyPopularityTabTextAppearance"
            app:tabTextColor="@color/black" />
    </RelativeLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/layout_tabs"
        android:background="@color/white"
  app:layout_behavior="@string/appbar_scrolling_view_behavior" />

下图是我的需求:点击后能弹出一个列表,每个栏目的数据不一样
这里就需要自定义TabLayout.Tab 中的mCustomView;
TabLayout的用法这里就不阐述了,只描述上图实现
具体步骤如下:
1:初始化TabLayout后,重设一下每个Tab的View

private void setupTabViews() {
        for (int i = 0, size = mTabLayout.getTabCount(); i < size; i++) {
            mTabLayout.getTabAt(i).setCustomView(getTabView(i));
        }
    }

2:生成View,并用一个集合装载(后面会用到)

private LinkedList<GQRecordTabView> tabViews = new LinkedList<>();

    public View getTabView(int position) {
        GQRecordTabView tabView = (GQRecordTabView) LayoutInflater.from(this).inflate(R.layout.widget_tab_text, null);
        tabView.setText(mTitleList.get(position).getTitleName());
        tabView.setPopData(mPopData.get(position));
        tabView.setOnDateChangeListener(this);
        if (position == 0) {
            tabView.setChecked(true);
            tabView.setCanShowPop(true);
        }
        tabViews.add(tabView);
        return tabView;
    }

3:GQRecordTabView是一个自定义的View,我在里面给他绑定了一个PopWindow用于实现上面的下拉菜单(代码就不贴出来了,同学你按自己的逻辑写就好了)
4:自定义View后需要我们手动去change View的状态,这里我们监听ViewPager的切换事件

mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                //手动变更tabView的状态
                for (int i = 0; i < tabViews.size(); i++) {
                    if (i == position) {
                        tabViews.get(i).setChecked(true);
                        tabViews.get(i).setCanShowPop(true);
                    } else {
                        tabViews.get(i).setChecked(false);
                        tabViews.get(i).setCanShowPop(false);
                    }
                }
                mCurrentIndex = position;

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

先写到这里了,需求又改了,我得加班去了.,有问题的同学可以留言..

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值