Tab 选项卡:Android详情使用介绍
Tab 选项卡是啥、咋用说白了Tab 就是顶上那一排小标签用户点「首页」「分类」「我的」下面换成对应的内容页。在 Android 里这一页一页一般用Fragment来做。现在大家都这么搭上面TabLayout管标签长啥样、点哪个下面ViewPager2管左右滑、切到哪一页。两个绑一块儿点标签会翻页滑页面标签也会跟着动。为啥要这么搞每个 Tab 一块内容各自一个Fragment以后改起来不揪头发。既能点标签切也能手指左右滑跟很多 App 习惯一样。用的是 Material 那套颜色、下划线、图标都好调。先把库加上模块里的build.gradle里要有 Material版本跟你项目里别的依赖对齐就行implementation com.google.android.material:material:1.11.0ViewPager2一般在依赖里会顺带拉进来要是报错找不到再单独加一行androidx.viewpager2:viewpager2。布局怎么摆常见就是上面一排 Tab下面一大块给 ViewPager2你想横着摆也行原理一样。tabMode帮你决定标签是几个平分宽度还是多了就横着滑com.google.android.material.tabs.TabLayoutandroid:idid/tabLayoutandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentapp:tabModefixedapp:tabGravityfill/androidx.viewpager2.widget.ViewPager2android:idid/viewPagerandroid:layout_widthmatch_parentandroid:layout_height0dpandroid:layout_weight1/fixed比如就三四个 Tab大家均分一行挺整齐。scrollableTab 特别多的时候标签这一行可以左右滑不会挤成一团。告诉 ViewPager2每一页是啥每一页是Fragment的话写一个类继承FragmentStateAdaptercreateFragment里按位置return不同的 FragmentgetItemCount写一共有几页publicclassMainPagerAdapterextendsFragmentStateAdapter{publicMainPagerAdapter(NonNullFragmentActivityfragmentActivity){super(fragmentActivity);}NonNullOverridepublicFragmentcreateFragment(intposition){switch(position){case0:returnnewTabOneFragment();case1:returnnewTabTwoFragment();default:returnnewTabThreeFragment();}}OverridepublicintgetItemCount(){return3;}}Activity 里把线和两头接上先setAdapter再用TabLayoutMediator把「第几个 Tab」和「第几页」对上号顺便写上每个 Tab 显示啥字ViewPager2viewPagerfindViewById(R.id.viewPager);TabLayouttabLayoutfindViewById(R.id.tabLayout);viewPager.setAdapter(newMainPagerAdapter(this));newTabLayoutMediator(tabLayout,viewPager,(tab,position)-{switch(position){case0:tab.setText(首页);break;case1:tab.setText(分类);break;case2:tab.setText(我的);break;}}).attach();TabLayoutMediator就是干这个的别让 Tab 和页面各玩各的。标题在 lambda 里写要是想做纯图标 Tab可以改成tab.setIcon(...)之类。写一遍顺序照着做就行XML 里放好TabLayout和ViewPager2。每个 Tab 对应一个Fragment先写好。写个FragmentStateAdapter页数和 Tab 数量对得上。viewPager.setAdapter(...)。new TabLayoutMediator(...).attach()。想好看一点再去调 Tab 颜色、底下那条指示线主题或 XML 里都能弄。几个容易踩的坑一定要先setAdapter再attach()反了有时会对不齐。Tab 个数会变比如接口动态返回时Adapter 要跟着更新Mediator 有时要重新绑一下不然选中状态和页面会打架。子页面里如果还有横着滑的列表可能跟ViewPager2抢手势这种要单独处理嵌套滑动或改一改方向不然用户会觉得「怎么滑不动」。老古董ViewPagerPagerAdapter能别用就别用了新项目ViewPager2FragmentStateAdapter更省心。就这么回事TabLayout 管上面那一排字ViewPager2 管下面几页 Fragment中间用 TabLayoutMediator 拴在一起。用户点点标签、滑滑页面两边永远是一套的。