Android ViewPager2 + Fragment + TabLayout + 自定义Tab样式示例代码

本示例代码演示了如何使用ViewPager2、Fragment和TabLayout创建带有自定义Tab样式的页面切换效果。

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private ViewPager2 viewPager;
    private TabLayout tabLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        viewPager = findViewById(R.id.view_pager);
        tabLayout = findViewById(R.id.tab_layout);

        List<Fragment> fragmentList = new ArrayList<>();
        fragmentList.add(new Fragment1());
        fragmentList.add(new Fragment2());
        fragmentList.add(new Fragment3());

        viewPager.setAdapter(new FragmentAdapter(this, fragmentList));

        new TabLayoutMediator(tabLayout, viewPager, (tab, position) -> {
            switch (position) {
                case 0:
                    tab.setText('Tab1');
                    break;
                case 1:
                    tab.setText('Tab2');
                    break;
                case 2:
                    tab.setText('Tab3');
                    break;
            }
        }).attach();
    }
}

FragmentAdapter.java

public class FragmentAdapter extends FragmentStateAdapter {

    private List<Fragment> fragmentList;

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

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

    @Override
    public int getItemCount() {
        return fragmentList.size();
    }
}

Fragment1.java

public class Fragment1 extends Fragment {

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment1, container, false);
    }
}

Fragment2.java

public class Fragment2 extends Fragment {

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment2, container, false);
    }
}

Fragment3.java

public class Fragment3 extends Fragment {

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment3, container, false);
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/tab_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/white"
        android:elevation="4dp"
        android:minHeight="?attr/actionBarSize"
        app:tabGravity="fill"
        app:tabIndicatorColor="@color/colorPrimary"
        app:tabIndicatorHeight="2dp"
        app:tabMode="fixed"
        app:tabSelectedTextColor="@color/colorPrimary"
        app:tabTextColor="@android:color/darker_gray" />

    <androidx.viewpager2.widget.ViewPager2
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

fragment1.xml、fragment2.xml、fragment3.xml

自定义布局,用于展示不同的内容。

注意:

  • 以上代码仅供参考,实际使用时需要根据具体需求进行修改。
  • 请确保项目中已经添加了必要的依赖库,例如ViewPager2、TabLayout等。
  • 可以根据需要对Tab样式进行自定义,例如设置背景颜色、文字颜色、图标等。
  • 在fragment1.xml、fragment2.xml、fragment3.xml中设计每个Fragment的具体内容。
  • 可以根据需求增加更多的Fragment和Tab。

希望本示例代码对您有所帮助。如果您有任何问题,请随时提问。

Android ViewPager2 + Fragment + TabLayout + 自定义Tab样式示例代码

原文地址: https://www.cveoy.top/t/topic/oV20 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录