TabLayout标签文本不显示

我在一个Fragment内使用TabLayout来显示三个固定的选项卡和选项卡正在工作,但它不显示选项卡文本,即使我在布局中设置app:tabTextColor属性仍然不可见。

NewFragment.java

 public class NewFragment extends Fragment { private RecyclerView mRecyclerView; private RecyclerView.LayoutManager mLayoutManager; private RecyclerView.Adapter mAdapter; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View inflatedView = inflater.inflate(R.layout.new_fragment, container, false); TabLayout tabLayout = (TabLayout) inflatedView.findViewById(R.id.tabLayout); tabLayout.addTab(tabLayout.newTab().setText("Tab 1")); tabLayout.addTab(tabLayout.newTab().setText("Tab 2")); tabLayout.addTab(tabLayout.newTab().setText("Tab 3")); final ViewPager viewPager = (ViewPager) inflatedView.findViewById(R.id.viewpager); LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity()); mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); viewPager.setAdapter(new PagerAdapter(getFragmentManager(), tabLayout.getTabCount())); viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); tabLayout.setupWithViewPager(viewPager); tabLayout.setTabMode(TabLayout.MODE_FIXED); tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { viewPager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } }); return inflatedView; } public class PagerAdapter extends FragmentStatePagerAdapter { int mNumOfTabs; public PagerAdapter(FragmentManager fm, int NumOfTabs) { super(fm); this.mNumOfTabs = NumOfTabs; } @Override public Fragment getItem(int position) { switch (position) { case 0: return new FragmentTab(); case 1: return new FragmentTab(); case 2: return new FragmentTab(); default: return null; } } @Override public int getCount() { return mNumOfTabs; } } } 

newfragment.xml

 <android.support.design.widget.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" tools:context=".NewFragment"> <android.support.design.widget.TabLayout android:id="@+id/tabLayout" android:layout_width="match_parent" android:layout_height="wrap_content" app:tabMode="fixed" app:tabTextColor="#ffffff" app:tabGravity="fill" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/white"/> </android.support.design.widget.AppBarLayout> 

Solutions Collecting From Web of "TabLayout标签文本不显示"

问题是你在用addTab()调用设置你的选项卡之后调用setupWithViewPager() ,并有效地覆盖它们。

TabLayout有关setupWithViewPager()的文档 :

此布局中显示的选项卡将从ViewPager适配器的页面标题填充。

如果你想使用你的TabLayoutViewPager ,你应该在你的PagerAdapter重载getPageTitle() (并删除addTab()调用,它们是多余的)。

例如:

 public class ExamplePagerAdapter extends FragmentStatePagerAdapter { // tab titles private String[] tabTitles = new String[]{"Tab1", "Tab2", "Tab3"}; public ExamplePagerAdapter(FragmentManager fm) { super(fm); } // overriding getPageTitle() @Override public CharSequence getPageTitle(int position) { return tabTitles[position]; } @Override public Fragment getItem(int position) { switch (position) { case 0: return new Tab1Fragment(); case 1: return new Tab2Fragment(); case 2: return new Tab3Fragment(); default: return null; } } @Override public int getCount() { return tabTitles.length; } } 

我调用tabs.setupWithViewPager(viewPager)之后为每个选项卡添加了选项卡文本和图标

  viewPager.setAdapter(new MyViewAdapter(getSupportFragmentManager())); TabLayout tabs=(TabLayout) findViewById(R.id.tabs); tabs.setupWithViewPager(viewPager); tabs.getTabAt(0).setIcon(R.drawable.icon1); tabs.getTabAt(1).setIcon(R.drawable.icon2); tabs.getTabAt(0).setText(getResources().getText(R.string.tab1)); tabs.getTabAt(1).setText(getResources().getText(R.string.tab2));