在build.gradle中配置文件
implementation 'androidx.viewpager2:viewpager2:1.0.0'
implementation "com.google.android.material:material:1.1.0"
在xml文件中配置com.google.android.material.tabs.TabLayout
与androidx.viewpager2.widget.ViewPager2
的标签
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_height="wrap_content"
android:layout_width="match_parent"/>
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewpager2"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_below="@id/tab_layout"
android:orientation="horizontal"
/>
在activity中
先声明 ViewPager2 TabLayout TabLayoutMediator
其中TabLayoutMediator是tablayout+viewpager2的联动工具类 重写onConfigureTab()方法可以设置顶部Tablayout的textview(注意:最好一定要使用attach()方法)
ViewPager2如果要fragment复用 不可以只new一个fragment(因为fragment有其特有生命周期 当共用一个时 切换页面的时候要先隐藏再显示 而共用的原因会都隐藏导致出错) 所以哪怕复用也是要声明多个fragment
public class MainActivity extends AppCompatActivity {
private ViewPager2 viewPager2;
private TabLayout tabLayout;
private TabLayoutMediator mediator;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final String[] tabs = {"推荐", "关注"};
Fragment[] fragments = new Fragment[tabs.length];
fragments[0] = new FeedMainFragment();
fragments[1] = new FeedMainFragment();
viewPager2 = findViewById(R.id.viewpager2);
tabLayout = findViewById(R.id.tab_layout);
viewPager2.setAdapter(new FragmentStateAdapter(getSupportFragmentManager(), getLifecycle()) {
@NonNull
@Override
public Fragment createFragment(int position) {
// 各分页的fragment
return fragments[position];
}
@Override
public int getItemCount() {
// 有多少个分页
return tabs.length;
}
});
mediator = new TabLayoutMediator(tabLayout, viewPager2, new TabLayoutMediator.TabConfigurationStrategy() {
@Override
public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
TextView textView = new TextView(MainActivity.this);
textView.setText(tabs[position]);
tab.setCustomView(textView);
}
});
mediator.attach();
}
}
最后如果想设置顶部Tablayout 点击的模块字体放大变色等功能
需要做如下声明 并重写onPageSelected方法 在该方法内设置效果
private ViewPager2.OnPageChangeCallback changeCallback = new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageSelected(int position) {
//可以来设置选中时tab的大小
int tabCount = tabLayout.getTabCount();
for (int i = 0; i < tabCount; i++) {
TabLayout.Tab tab = tabLayout.getTabAt(i);
TextView tabView = (TextView) tab.getCustomView();
if (tab.getPosition() == position) {
tabView.setTextSize(20);
tabView.setTypeface(Typeface.DEFAULT_BOLD);
} else {
tabView.setTextSize(15);
tabView.setTypeface(Typeface.DEFAULT);
}
}
}
};
然后在activity的onCreate()方法中设置页面切换监听
// 页面切换监听
viewPager2.registerOnPageChangeCallback(changeCallback);
效果图: