com.google.android.material.tabs.TabLayout

一、布局

<RelativeLayout 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:background="@color/white"
    android:orientation="vertical"
    tools:context=".main.MainActivity">


    <androidx.viewpager2.widget.ViewPager2
        android:id="@+id/main_viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="65dp"/>

    <com.google.android.material.tabs.TabLayout
            android:id="@+id/tab_layout_main"
            android:layout_width="match_parent"
            android:background="@color/white"
            app:tabGravity="fill"
            app:tabMaxWidth="0dp"
            app:tabMode="fixed"
            android:layout_height="65dp" />

</RelativeLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:background="@color/transparent"
    android:gravity="center">

    <CheckBox
        android:id="@+id/tb_main_tab_checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:button="@null"
        android:checked="false"
        android:focusable="false"
        android:clickable="false"
        android:text="" />

    <TextView
        android:id="@+id/tv_main_tab_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/dimen_4"
        android:text=""
        android:textSize="@dimen/font_12"
        android:clickable="false"
        android:textColor="@drawable/common_tab_text_color" />

</LinearLayout>

 

二、界面中使用

private String[] tabs;
private int[] resIds;
  tabs = this.getResources().getStringArray(R.array.main_tab_btn_name);
        resIds = new int[]{R.drawable.icon_main_tab_bg,
                R.drawable.icon_project_tab_bg,
                R.drawable.icon_block_tab_bg,
                R.drawable.icon_me_tab_bg};

        ViewPagerScrollAdapter scrollAdapter = new ViewPagerScrollAdapter(getSupportFragmentManager(), getLifecycle(), fragmentList);

        binding.mainViewpager.setAdapter(scrollAdapter);

        binding.mainViewpager.setUserInputEnabled(false);
//        binding.mainViewpager.setOffscreenPageLimit(2);
        binding.tabLayoutMain.setTabTextColors(R.color.color_3D80FC, R.color.color_3D80FC);

        mediator = new TabLayoutMediator(binding.tabLayoutMain, binding.mainViewpager, new TabLayoutMediator.TabConfigurationStrategy() {
            @Override
            public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
                //自定义TabView
                View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_main_tab_view, null);
                view.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT,1));

                TextView tabView = view.findViewById(R.id.tv_main_tab_text);
                tabView.setText(tabs[position]);


                CheckBox checkBox = view.findViewById(R.id.tb_main_tab_checkbox);
                checkBox.setBackgroundResource(resIds[position]);
                if (position == 0) {
                    checkBox.setChecked(true);
                    tabView.setSelected(true);
                }

                tab.setCustomView(view);
            }
        });

        binding.tabLayoutMain.setSelectedTabIndicatorHeight(0); //去掉下划线
        binding.tabLayoutMain.setTabRippleColor(ColorStateList.valueOf(getContext().getResources().getColor(R.color.white)));//去掉黑色背景

        //要执行这一句才是真正将两者绑定起来
        mediator.attach();
    binding.tabLayoutMain.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                selectOrLogin();
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
                ((CheckBox) tab.getCustomView().findViewById(R.id.tb_main_tab_checkbox)).setChecked(false);
                tab.getCustomView().findViewById(R.id.tv_main_tab_text).setSelected(false);
            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {
                selectOrLogin();
            }
        });
 
ViewPagerScrollAdapter 
public class ViewPagerScrollAdapter extends FragmentStateAdapter  {
    private ArrayList<Fragment> fragmentList;

    public ViewPagerScrollAdapter(@NonNull Fragment fragment) {
        super(fragment);
    }

    public ViewPagerScrollAdapter(@NonNull FragmentActivity fragmentActivity,ArrayList<Fragment> fragmentList) {
        super(fragmentActivity);
        this.fragmentList=fragmentList;
    }

    @Override
    public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
        recyclerView.setItemViewCacheSize(fragmentList.size());
    }

    public ViewPagerScrollAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle,ArrayList<Fragment> fragmentList) {
        super(fragmentManager, lifecycle);
        this.fragmentList=fragmentList;
    }


    @NonNull
    @Override
    public Fragment createFragment(int position) {
        // 返回Fragment
        return fragmentList.get(position);
    }

    @Override
    public int getItemCount() {
        // 获取Fragment数量
        return fragmentList.size();
    }

}

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-02-20 13:18:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-20 13:18:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-20 13:18:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-20 13:18:02       18 阅读

热门阅读

  1. AI人工智能,VR虚拟现实与《黑客帝国》

    2024-02-20 13:18:02       31 阅读
  2. SpringBoot 打成jar包后如何获取jar包Resouces下的文件

    2024-02-20 13:18:02       24 阅读
  3. 使用Hutool的ExcelUtil工具导出Excel时遇到的异常

    2024-02-20 13:18:02       29 阅读
  4. nodename nor servname provided, or not known

    2024-02-20 13:18:02       29 阅读
  5. Python实用代码片段(二)

    2024-02-20 13:18:02       34 阅读
  6. 机器人能否返回原点

    2024-02-20 13:18:02       32 阅读
  7. 16.Swift枚举

    2024-02-20 13:18:02       27 阅读
  8. 什么是SEO?和SPA与SSR又有什么关系?

    2024-02-20 13:18:02       36 阅读
  9. Excel表的内容批量生成个人加水印的Word文档

    2024-02-20 13:18:02       24 阅读
  10. leetcode3043. 最长公共前缀的长度

    2024-02-20 13:18:02       29 阅读
  11. 【IOS】import导入模块或头文件错误

    2024-02-20 13:18:02       27 阅读