<com.google.android.material.tabs.TabLayout android:id="@+id/tablayout" android:layout_width="match_parent" android:layout_height="wrap_content" app:tabSelectedTextColor="@color/black" app:tabIndicatorColor="#D51515" app:tabTextColor="@color/white" android:background="#2196F3">com.google.android.material.tabs.TabLayout>
其他属性
app:tabIndicatorColor :指示线的颜色
app:tabIndicatorHeight :指示线的高度
app:tabIndicatorFullWidth="false" 指示线是否与标题宽度一致
app:tabSelectedTextColor :tab选中时的字体颜色
app:tabTextColor="@color/colorPrimary" :未选中字体颜色
app:tabBackground="color" :整个tablayout颜色
app:tabMode="scrollable" :默认是fixed,固定的;scrollable:可滚动的
TabLayout+ViewPager+Fragmen使用
TabLayout实现导航栏
ViewPager实现横向滚动
Fragment实现页面布局
实现步骤:
TabLayout中设置vierPager:tabLayout.setupWithViewPager(viewPager);
ViewPager中适配FragmenPagertAdapter:
viewPager.setAdapter(new mFragmentPagerAdapter(getSupportFragmentManager(), fragmentList));
FragmenPagertAdapter中适配Fragment
1. activity 布局资源
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <com.google.android.material.tabs.TabLayout android:id="@+id/tablayout" android:layout_width="match_parent" android:layout_height="wrap_content" app:tabSelectedTextColor="@color/black" app:tabIndicatorColor="#D51515" app:tabTextColor="@color/white" app:tabIndicatorFullWidth="true" android:background="#2196F3"/> <androidx.viewpager.widget.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_weight="1" android:layout_height="0dp"/>LinearLayout>
2. Fragmen布局资源(3个)
<?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"> <TextView android:gravity="center" android:layout_width="match_parent" android:layout_height="match_parent" android:text="pager1"/>LinearLayout>
3. 创建BaseViewPagerFragment,便于在ViewPagerAdapter的getPageTitle()方法中设置TabLayout的标题
public class BaseViewPagerFragment extends Fragment { //Tab的标题 String title; public BaseViewPagerFragment(String title) { this.title = title; } public String getTitle() { return title; } @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return super.onCreateView(inflater, container, savedInstanceState); }}
4. 创建Fragment,实例化Fragment的布局资源(3个)
public class ViewPage1Fragment extends BaseViewPagerFragment { public ViewPage1Fragment(String title) { super(title); this.title = title; } @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View inflate = inflater.inflate(R.layout.viewpager1, container, false); return inflate; }}
5. FragmentPagerAdapter适配器
public class mFragmentPagerAdapter extends androidx.fragment.app.FragmentPagerAdapter { List<BaseViewPagerFragment> fragmentList; public mFragmentPagerAdapter(@NonNull FragmentManager fm, List<BaseViewPagerFragment> fragmentList) { super(fm); this.fragmentList = fragmentList; } @NonNull @Override public Fragment getItem(int position) { return fragmentList.get(position); } @Override public int getCount() { return fragmentList.size(); } /** * 适配TabItem的标题 * @param position * @return */ @Nullable @Override public CharSequence getPageTitle(int position) { return fragmentList.get(position).getTitle(); }}
6. Activity初始化
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); List<BaseViewPagerFragment> fragmentList = new ArrayList<>(); fragmentList.add(new ViewPage1Fragment( "pager1")); fragmentList.add(new ViewPage2Fragment("pager2")); fragmentList.add(new ViewPage3Fragment("pager3")); //初始化Viewpager并设置适配器 ViewPager viewPager = findViewById(R.id.viewpager); viewPager.setAdapter(new mFragmentPagerAdapter(getSupportFragmentManager(), fragmentList)); //初始化TabLayout TabLayout tabLayout = findViewById(R.id.tablayout); //设置到viewpager tabLayout.setupWithViewPager(viewPager); //设置tab的位置模式(屏幕显示不下时是否滚动):MODE_FIXED,MODE_SCROLLABLE tabLayout.setTabMode(TabLayout.MODE_AUTO); }}